使用Java springdata保存带有上限数组($ slice和$ sort)的mongoDB文档 [英] Saving with Java springdata a mongoDB document with capped array ($slice and $sort)
问题描述
我正在使用mongoDB和Java SpringData开发日志寄存器.
I'm developing a log register using mongoDB and Java SpringData.
这里用MongoDb限制的子集合讨论了mongoDB的结构,但是我会使用Java .最重要的是,我有一个包含一个或多个字段和一个上限数组的文档.
Here MongoDb capped sub-collection talks about mongoDB structure, but I would do with Java. The most important thing it's that I have a document with one or more fields and a capped array.
Java中是否有某种方法或方法可以做到这一点?
Is there some method or way in Java to do this?
我的对象就像:
user = {
name: String,
latest_messages: [String] (capped to a 100 elements)
}
在Java中:
public class MessageLog {
private ObjectId id;
private String name;
private List<Message> messages;
}
位置:
public class Message{
private String text;
private String level;
private Date date;
}
编辑:
我正在将Java与Spring源代码一起使用(mongodb驱动程序v2.10.1: http://central.maven.org/maven2/org/mongodb/mongo-java-driver/2.10.1/)
I'm using Java with Spring source (mongodb driver v2.10.1: http://central.maven.org/maven2/org/mongodb/mongo-java-driver/2.10.1/)
推荐答案
我终于使用以下代码获得了解决方案:
I finally get the solution using this code:
// Define the search query
BasicDBObject searchQuery = new BasicDBObject().append("idU", idUser);
// To create the json query to modify
BasicDBObject logDocument = new BasicDBObject();
// Create the object and add it to a list (because the $each require a list)
List<DBObject> list = new ArrayList<DBObject>();
DBObject object = new BasicDBObject().append("text", logMessage.getText());
object.append("level", logMessage.getLevel())
object.append("date", logMessage.getDate());
list.add(object);
// Create the $sort and $slice query at the same time
logDocument.append(
"$push",
new BasicDBObject().append("logs", new BasicDBObject().append("$each", list).append("$sort", new BasicDBObject().append("date", 1))
.append("$slice", -10)));
String json = "{findAndModify:\"collectionLog\", query:" + searchQuery.toString() + ", update: " + logDocument.toString() + ", upsert:true}";
try {
getMongoTemplate().executeCommand(json);
} catch (Exception e) {
System.out.println(e);
}
我希望它对其他人有用!
I hope it will be useful to someone else!!!
这篇关于使用Java springdata保存带有上限数组($ slice和$ sort)的mongoDB文档的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!