1

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

4

2 回答 2

3

Java 驱动程序和 python 是最发达的驱动程序,因此您可以在驱动程序DOCS中查看它。通常想法(命令的结构)与shell中的相同,您只需要帮助器来构造命令。

在 Java 中,此文档可以对它的工作方式提供一些提示:DOCS

因此对于

$推:

Mongoshell 文档示例

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

其中 { name: "joe" } 是标识要更新的正确文档的查询,分数是数组字段,89 将被异常。

Java文档

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

$elemmatch:

Mongoshell文档

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

$切片:

Mongoshell文档

句法:

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

在Java中类似(只是因为我没有找到这个确切的更新使用切片的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 在其他情况下的用法: $slice mongoDB JavaMongo java 驱动程序 - 在没有任何其他字段 或此线程的情况下检索数组切片:https://groups.google.com/forum/#!主题/mongodb-user/4c3P0_FOzyM

于 2013-09-02T09:36:46.267 回答
2

There's no automated way to convert shell queries to Java queries, but all queries that are supported in the shell are supported in the Java driver. As in the example Attish has given, everywhere you see

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

you need to convert those to use BasicDBObject:

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

effectively

{ key : value }

->

new BasicDBObject (key, value);
于 2013-09-02T10:06:41.303 回答