如何使用QueryBuilder和MongoDB构建ObjectID的$in查询
我正在尝试使用QueryBuilder(MongoDB Java API 2.9.1)构建一个$in查询。当查询是字符串数组时,我没有问题,但是当我尝试使用objectid数组时,它不起作用(不返回任何内容) 我能够成功运行查询并从控制台获得结果: 控制台中的查询: find({removed:false,app_id:{$in:[ObjectId(“4f75c53ac99d845186e19b2”),ObjectId(“4f75c53ac99d845186e19b3”)}) 由QueryBuilder(MongoDB Java API 2.9.1)创建的查询: 对象[]ID Java代码: DBObject query=QueryBuilder.start(“app_id”).in(id.),and(“removed”).is(false.get() DBObject上的ToString生成: {“app_id”:{“$in”:[{“$oid”:“4f75c533ac99d845186e19b2”}],已删除:false}如何使用QueryBuilder和MongoDB构建ObjectID的$in查询,mongodb,query-builder,Mongodb,Query Builder,我正在尝试使用QueryBuilder(MongoDB Java API 2.9.1)构建一个$in查询。当查询是字符串数组时,我没有问题,但是当我尝试使用objectid数组时,它不起作用(不返回任何内容) 我能够成功运行查询并从控制台获得结果: 控制台中的查询: find({removed:false,app_id:{$in:[ObjectId(“4f75c53ac99d845186e19b2”),ObjectId(“4f75c53ac99d845186e19b3”)}) 由QueryBui
不确定我是否做错了什么,或者API不支持ObjectId类型的查询中的和$。有什么想法吗 您的ID应为类型
org.bson.types.ObjectId
,因此类似的内容应该可以工作:
import org.bson.types.ObjectId;
ObjectId[] ids = new ObjectId[]{
new ObjectId("1234568abcd"),
new ObjectId("1234567abcd")};
DBObject query = QueryBuilder.start("app_id").in(ids)
.and("removed").is(false).get();
可能只是输入错误,但您在shell中使用的是“application\u id”,而
ToString
输出显示的是“app\u id”。很抱歉,ToString输出是正确的。它应该读取app_id而不是application_id。我将更新这个问题。在控制台查询中,数组中有两个objectid,但在Java代码中运行它时,只有一个objectid,因此可能这就是为什么没有任何对象与查询匹配。这是打字错误吗?尝试打印出您的ids数组,是否将正确的内容传递到.in()中?这是打字错误吗?两个objectid都将匹配,因此结果大小将不同,但查询返回的结果不相同。两个objectid都将匹配,因此结果大小将不同,但查询应返回不相同的结果。我遗漏的是,如果您运行查询,但不使用ObjectIds app_id,而是使用string类型,那么查询可以工作。