【问题标题】:querying array of objects using Java Mongodb driver使用 Java Mongodb 驱动程序查询对象数组
【发布时间】:2013-08-30 06:24:41
【问题描述】:

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

【问题讨论】:

  • 您能否为您可能在 JAva 中实现并具有 shell 格式的查询提供一个示例?虽然它在这里更适合,但可能你会得到更快的答案。如果您可以在您遇到困难的地方提供一些信息,以及您无法前进时的症状是什么,那也很棒。
  • 例如使用 $elemmatch , $slice ,$push 的查询(所有数组索引运算符)。在基于 Java Mongodb 的查询中是否有任何方法可以做到这一点?

标签: mongodb mongodb-java


【解决方案1】:

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

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

所以

$push:

Mongoshell DOCS 示例:

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

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

JavaDOCS

示例: 看看这个问题:(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中类似(只是因为我没有找到这个确切的更新使用切片的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 Java , Mongo java driver - retrieve slice of array without any other field 或者这个帖子:https://groups.google.com/forum/#!topic/mongodb-user/4c3P0_FOzyM

【讨论】:

  • 是的,我在 Spring Data Mongodb 中检查了相同的内容。我发现其中也存在等价物。但是对于在 Spring 数据 MongoDB 中使用 $slice 我找不到参考?你能帮我解决吗?
  • 对不起,我没有太多的经验。使用 Spring 数据 MongoDB,我很快检查了一下,什么也没找到。
【解决方案2】:

没有将 shell 查询转换为 Java 查询的自动方法,但 Java 驱动程序支持 shell 中支持的所有查询。正如 Attish 给出的示例,随处可见

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

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

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

有效

{ key : value }

->

new BasicDBObject (key, value);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-01
    • 1970-01-01
    相关资源
    最近更新 更多