关于我刚经历过的事情,我有一个简短的问题,并且我仍在思考为什么:
mongos> db.tickets.count({ "idReferenceList" : { "$in" : [ { "$oid" : "53f1f09f2cdcc8f339e5efa2"} , { "$oid" : "5409ae2e2cdc31c5aa0ce0a5"}]}});
0
mongos> db.tickets.count({ "idReferenceList" : { "$in" : [ ObjectId("53f1f09f2cdcc8f339e5efa2") , ObjectId("5409ae2e2cdc31c5aa0ce0a5")]}});
我曾以为在MongoDB中$oid和ObjectId拼写格式完全相同。有人知道为什么第一个查询返回0个结果,而第二个查询返回2个结果(正确的答案)吗?
此外,我正在使用Morphia框架与MongoDB交互,该框架使用MongoDB Java驱动程序。我意识到当在非_id字段上的ObjectIds数组中使用$in操作符进行搜索时存在问题,通过执行以下代码行来解决:
List< ObjectId > fParams = new ArrayList< ObjectId >();
fParams.add(...);
Query<Ticket> query = genericDAO.createQuery();
query.field("idReferenceList").in(fParams);
result = genericDAO.find(query).asList();
非常感谢您的支持。
敬礼,
- Luis Cappa