1
我正在测试spring-data,它是mongodb支持。意外的MongoDB“或”查询行为
我对使用or-queries时创建查询有疑问。考虑以下几点:
Query query = new Query().or(new Query(where("receiverId").is(userId)), new Query(where("requesterId").is(userId)));
query.and(where("status").is(status));
这将导致以下MongoDB中查询:
"$or" : [ { "receiverId" : { "$oid" : "4d78696025d0d46b42d9c579"}} , { "requesterId" : { "$oid" : "4d78696025d0d46b42d9c579"}}] , "status" : "REQUESTED"}
这将返回结果为零,而一个预期。在下面的错误运行MongoDB中命令结果的查询:
error: { "$err" : "invalid operator: $oid", "code" : 10068 }
修改查询和MongoDB中命令运行正常工作:
{ "$or" : [ { "receiverId" : ObjectId("4d78696025d0d46b42d9c579")} , { "requesterId" : ObjectId("4d78696025d0d46b42d9c579")}] , "status" : "REQUESTED"}
注意使用的ObjectId的(“...”),而不是$ oid。
我正在做什么错误的方式?也许设置查询错误?
谢谢!实际使用了mongosniff和ObjectId。 – eirik 2011-03-13 10:26:07