使用Java Mongodb驱动程序查询对象数组

时间:2013-08-30 06:24:41

标签: mongodb mongodb-java

是否存在将普通Mongodb查询更改为Java Mongodb驱动程序特定查询?我想知道在普通的MongoDB的每个查询中,Java Mongodb驱动程序中是否存在等效查询?因为我们在普通Mongodb中查询子文档数组的示例,但是通过Java MongoDB驱动程序执行相同操作,我们没有足够的示例。

2 个答案:

答案 0 :(得分:3)

Java驱动程序和python是最发达的驱动程序,因此您可以在驱动程序DOCS中进行检查。通常,这个想法(命令的结构)与shell中你需要助手来构造命令是一样的。

在Java中,本文档可以提供一些有关其工作原理的提示:DOCS

所以

<强> $推:

Mongoshell DOCS 例如:

db.students.update(
                    { name: "joe" },
                    { $push: { scores: 89 } }
                  )

其中{name:“joe”}是一个标识要更新的正确文档的查询,分数是一个数组字段,89将被删除。

Java DOCS

例如: 看看这个问题:(MongoDB Java) $push into array

<强> $ elemmatch:

Mongoshell DOCS

例如: 看看这个问题:Convert MongoDB query into Java

$ slice:

Mongoshell DOCS

语法:

db.collection.update( <query>,
                      { $push: {
                                 <field>: {
                                            $each: [ <value1>, <value2>, ... ],
                                            $slice: <num>
                                          }
                               }
                      }
                    )

在Java中就像(因为我没有找到这个确切的更新uitilized slice在java中的一个例子,这是我自己构建的):

final MongoClient mongoClient = new MongoClient();
final DBCollection coll = mongoClient.getDB("TheDatabase").getCollection("TheCollection");
coll.update(<query>, new BasicDBObject("$push", 
                         new BasicDBObject(<field>, 
                                          new BasicDBObject("$each", 
                                                new BasicDBList()
                                                     .put(0,<value1>)
                                                     .put(1,<value2>)
                                                     .put(3,<value3>))
                                          .append('$slice',-5)));

示例:在其他情况下也可以查看这些问题以了解切片的用法: $slice mongoDB JavaMongo java driver - retrieve slice of array without any other field 或者这个帖子:https://groups.google.com/forum/#!topic/mongodb-user/4c3P0_FOzyM

答案 1 :(得分:2)

没有自动方式将shell查询转换为Java查询,但Java驱动程序支持shell中支持的所有查询。正如Attish给出的例子,无论你看到什么

{ "$someOperator" : { "someKey": "someValue" } }

你需要将它们转换为使用BasicDBObject:

new BasicDBObject("$someOperator", new BasicDBObject("someKey", "someValue"));

有效

{ key : value }

- &GT;

new BasicDBObject (key, value);