java - 使用 Java springdata 保存带有上限数组($slice 和 $sort)的 mongoDB 文档

标签 java mongodb sorting spring-data slice

我正在使用 mongoDB 和 Java SpringData 开发日志寄存器。

这里MongoDb capped sub-collection谈论 mongoDB 结构,但我会使用 Java。最重要的是我有一个包含一个或多个字段和一个上限数组的文档。

Java 中有某种方法可以做到这一点吗?

我的对象是这样的:

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/ )

最佳答案

我终于使用这段代码得到了解决方案:

// 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);
}

我希望它对其他人有用!!!

关于java - 使用 Java springdata 保存带有上限数组($slice 和 $sort)的 mongoDB 文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16032246/

相关文章:

java - 如何在 IntelliJ IDEA 中构建 OS X Java 应用程序包?

ruby-on-rails - Mongoid:before_destroy 和 Paranoia

node.js - 当更新时未传递相应值时,值在数据库内设置为 null

java - 向上或向下移动自定义数组项

PHP多维数组(usort)

java - 为什么 Unicode 字符在数据库中正确显示,但显示为?当通过 Hibernate 在 Java 中打印时?

java - 如何在 Spring Boot @RestController 中不序列化 @Id 字段?

java - 如何更改下面的代码以避免意外的类型错误(必需 : variable; found: value)?

mongodb - MongoDB observeOn 为什么不使用指定的执行上下文?

python - 无法在终端中使用 sort 命令对 txt 文件中的数据进行排序