java - 使用java对mongodb中的子文档数组进行排序

标签 java arrays mongodb mongodb-java mongo-java

u我在mongodb的文档中有一个子文档数组。
我想对这些子文档进行排序。 我发现可以在更新数组时进行排序。
链接:http://docs.mongodb.org/manual/reference/operator/update/sort/

我想用java来做这个。 这是我的代码的一部分:

BasicDBObject each = new BasicDBObject("$each", input);
BasicDBObject operations = each.append("$slice", "-10").append("$sort", new BasicDBObject("order",1));
push = new BasicDBObject("$push", new BasicDBObject("datas", operations));
collection.update(query,  push);

但事实证明,它并没有把“操作”变成运算符,而是直接将其插入文档中,并将“$each”、“$slice”和“$sort”作为字段。 我哪里做错了?

最佳答案

我已经实现了 link 中显示的 java 版本的查询你上面提到过。

查询是:

db.students.update( { name: "joe" },
                    { $push: { quizzes: { $each: [ { id: 3, score: 8 },
                                                   { id: 4, score: 7 },
                                                   { id: 5, score: 6 } ],
                                          $sort: { score: 1 },
                                          $slice: -5
                                        }
                             }
                    }
                  )

使用 Java 驱动程序,您可以按如下方式实现它:

DBCollection coll = db.getCollection("students");

DBObject query = new BasicDBObject("name", "joe");

DBObject dbObj1 = new BasicDBObject();
dbObj1.put("id", 3);
dbObj1.put("score", 8);

DBObject dbObj2 = new BasicDBObject();
dbObj2.put("id", 4);
dbObj2.put("score", 7);

DBObject dbObj3 = new BasicDBObject();
dbObj3.put("id", 5);
dbObj3.put("score", 6);

BasicDBList eachList = new BasicDBList();
eachList.add(dbObj1);
eachList.add(dbObj2);
eachList.add(dbObj3);

BasicDBObject quizzesObj = new BasicDBObject();
quizzesObj.put("$each", eachList);
quizzesObj.put("$sort", new BasicDBObject("score", 1));
quizzesObj.put("$slice", -5);

coll.update(query, new BasicDBObject("$push", new BasicDBObject("quizzes", quizzesObj)));

关于java - 使用java对mongodb中的子文档数组进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20088150/

相关文章:

java - 最大整数横向数组

node.js - mongoose 不会获取更新的数据,除非重新启动nodejs

java - 更改嵌套对象的值 - MongoDB Java

java - Apache Camel 根据请求使用文件内容丰富消息

java - salesforce EMP 连接器 API 版本 37.0 失败,并显示错误消息:API 版本不受支持

java - Java 2 中的 DOM 解析问题

java - 零如何影响除法的结果

java - 需要仅更新java中mongo数组中的特定元素

c++ - 在函数中传入和修改数组

node.js - 通过 Node JS 插入时,Mongo shell 不显示集合(命令 show collections)