【发布时间】:2015-03-15 19:22:08
【问题描述】:
考虑以下记录:
用户记录
{
"_id" : ObjectId("5234ccb7687ea597eabee677"),
"class" : [
{ "_id" : ObjectId("5234ccb7687ea597eabee671", "num" : 10, "color" : "blue" },
{ "_id" : ObjectId("5234ccb7687ea597eabee672", "num" : 100, "color" : "blue" }
]
}
这个用户有两个类子记录,现在我需要一个查询来查找所有具有类属性的用户,其中“class._id”的值至少为一个用户“class._id”
这里有一个更详细的例子:
假设有四个用户:
A:{_id:432645624232345,class:[{_id:123,name:'foo'}]}
B:{_id:432645624232555,class:[{_id:555,name:'foo'},{_id:123,name:'foo'}]}
C:{_id:432645344232345,class:[{_id:555,name:'foo'},{_id:111,name:'www'}]}
D:{_id:432644444232345,class:[{_id:222,name:'sss'},{_id:555,name:'www'},{_id:123,name:'foo'}]}
现在如果 B 登录,我需要查询其类子文档包含至少一个文档的所有用户,该文档是 _id==555 或 _id==123(555 和 123 来自 B 用户),在这种情况下,查询结果应该是:
A:{_id:432645624232345,class:[{_id:123,name:'foo'}]} // match _id=123
B:{_id:432645624232555,class:[{_id:555,name:'foo'},{_id:123,name:'foo'}]} //match _id=123 and _id=555
C:{_id:432645344232345,class:[{_id:555,name:'foo'},{_id:111,name:'www'}]} //match _id=555
D:{_id:432644444232345,class:[{_id:222,name:'sss'},{_id:555,name:'www'},{_id:123,name:'foo'}]} ///match _id=123 and _id=555
这是所有用户。
到目前为止,我得到了这个:
{"class._id" : { $in : ["5234ccb7687ea597eabee671", "5234ccb7687ea597eabee672"] } }
但是当不同的用户登录时,class._id 的查询条件是不同的。那么有没有运营商可以做到这一点
{"class._id" : { $in : req.user.class } }
希望我说清楚了。
【问题讨论】:
标签: node.js mongodb express mongoose