我正在测试 spring-data 并且它是 mongodb 支持。
我对使用或查询时的查询创建有疑问。考虑以下:
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"}
这将返回零结果,而预期结果为 1。在 mongodb 命令中运行此查询会导致以下错误:
error: { "$err" : "invalid operator: $oid", "code" : 10068 }
修改查询并在 mongodb 命令中运行它可以正常工作:
{ "$or" : [ { "receiverId" : ObjectId("4d78696025d0d46b42d9c579")} , { "requesterId" : ObjectId("4d78696025d0d46b42d9c579")}] , "status" : "REQUESTED"}
注意使用 ObjectId("...") 而不是 $oid。
我是不是走错路了?也许设置查询错误?