如何使用带有MongoDB的QueryBuilder构建一个$ in的ObjectIds查询

时间:2012-10-09 11:40:17

标签: mongodb query-builder

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

Object [] ids;

Java代码: DBObject query = QueryBuilder.start(“app_id”)。in(ids).and(“removed”)。is(false).get();

DBObject上的ToString产生: {“app_id”:{“$ in”:[{“$ oid”:“4f75c533ac99d845186e19b2”}]},“已删除”:false}

我不确定我是做错了什么,或者API不支持和查询类型为ObjectId的$。有任何想法吗?

1 个答案:

答案 0 :(得分:-2)

你的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();