如何使用Java创建包含ObjectIds的查询?

3

我有一组ID,例如:

["51eae104c2e6b6c222ec3432", "51eae104c2e6b6c222ec3432", "51eae104c2e6b6c222ec3432"]

我需要找到使用这组ID的所有文档。
    BasicDBObject query = new BasicDBObject(); 
    BasicDBList list = new BasicDBList();
    ObjectId ob1 = new ObjectId("51eae100c2e6b6c222ec3431");
    ObjectId ob2 = new ObjectId("51eae100c2e6b6c222ec3432");
    list.add(ob1);
    list.add(ob2);
    query.append("_id", new BasicDBObject("$in", list));

此查询找不到任何内容,因为它与

相同。
{ "_id" : { "$in" : [ { "$oid" : "51eae100c2e6b6c222ec3431"} , { "$oid" : "51eae100c2e6b6c222ec3432"}]}}

为了找到某个东西,它必须存在。
{_id:{$in:[ObjectId("51eae100c2e6b6c222ec3431") , ObjectId("51eae104c2e6b6c222ec3432")]}}

但是我不知道如何在Java中将ObjectId("51eae100c2e6b6c222ec3431")添加到列表中。


1个回答

3
"{ "$oid" : "51eae100c2e6b6c222ec3431"}ObjectId("51eae100c2e6b6c222ec3431")是相同的,只是格式不同。具体的格式可以参考这个页面:http://docs.mongodb.org/manual/reference/mongodb-extended-json/。如果查询没有找到任何文档(但您确定它们存在于集合中),那么可能有其他问题。首先请确保连接的服务器和数据库和集合名称正确。 Rob."

我刚刚在Mongo shell中检查了一下,这个查询{_id:{$in:[ { "$oid" : "51ebf50bc2e66fa145ddaa30"} , { "$oid" : "51ebf510c2e66fa145ddaa31"}]}}虽然在集合中存在这些oid的文档,但是没有返回任何内容。 - Guru_1010
2
"shell mode"格式是ObjectId("51eae100c2e6b6c222ec3431")。Java驱动程序的JSON工具将ObjectId转换为严格的格式{ "$oid" : "51eae100c2e6b6c222ec3431"}。查询在Java中有效吗? - Rob Moore
是的,它可以从Java工作。谢谢。但是另一个问题是查询只返回一个文档而不是两个。 - Guru_1010
哪一个?Java还是Shell?如果是Java,您能否编辑问题并展示执行查询和消耗结果的代码是什么样子的? - Rob Moore
它并不展示你如何执行查询,只是构建查询文档。 - Rob Moore
我执行了 db.collection.find(query);,其中 collection 是我的集合名称。 - Guru_1010

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接