Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用QueryBuilder和MongoDB构建ObjectID的$in查询_Mongodb_Query Builder - Fatal编程技术网

如何使用QueryBuilder和MongoDB构建ObjectID的$in查询

如何使用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

我正在尝试使用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}


不确定我是否做错了什么,或者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类型,那么查询可以工作。