【发布时间】:2012-10-09 11:40:17
【问题描述】:
我正在尝试使用 QueryBuilder (MongoDB Java API 2.9.1) 构建 $in 查询。当查询是字符串数组时我没有问题,但是当我尝试使用 ObjectIds 数组时它不起作用(不返回任何内容)。
我能够成功运行查询并从控制台获得结果:
在控制台中查询: db.collection.find({removed:false,app_id: {$in : [ObjectId("4f75c533ac99d845186e19b2"), ObjectId("4f75c533ac99d845186e19b3")]}})
QueryBuilder (MongoDB Java API 2.9.1) 创建的查询:
对象[] id;
Java 代码: DBObject query = QueryBuilder.start("app_id").in(ids).and("removed").is(false).get();
DBObject 上的 ToString 产生: { "app_id" : { "$in" : [ { "$oid" : "4f75c533ac99d845186e19b2"}]} , "removed" : false}
不确定是我做错了什么还是 API 不支持 $in 类型的 ObjectId 查询。有任何想法吗?
【问题讨论】:
-
可能只是一个错字,但您在 shell 中使用“application_id”,
ToString输出显示“app_id”。 -
抱歉 toString 输出是正确的。它应该读取 app_id 而不是 application_id。我会更新问题。
-
在您的控制台查询中,您的数组中有两个 objectid,但是当您在 Java 代码中运行它时,您只有一个 object id,所以也许这就是为什么没有匹配查询的原因。这是一个错字吗?尝试打印出您的 ids 数组,您是否将正确的东西传递给您的 .in() ?这是笔误吗?
-
两个 objectIds 都将匹配,因此结果大小会不同,但查询返回的结果却不是。
-
两个 objectId 都将匹配,因此结果大小会不同,但查询应该返回一个它不返回的结果。我遗漏的是,如果您运行查询,但不是使用 ObjectIds app_id 是字符串类型,那么查询就可以工作。
标签: mongodb query-builder