我有2个收藏。
收集“用户”
{
"_id" : ObjectId("54b00098e0fdb6634b1f54e6"),
"state" : "active",
"backends" : [
DBRef("backends", ObjectId("54b001ebe0fd853df1c93419")),
DBRef("backends", ObjectId("54b00284e0fd853df1c9341b"))
]
}
收集“后端”
{
"_id" : ObjectId("54b001ebe0fd853df1c93419"),
"state" : "running"
}
我想获得后端状态为“正在运行”的用户后端列表。 mongodb怎么能这样加入两个表呢? 是从后端向后搜索还是对过滤器起作用的任何方法?
我可以像这样搜索
db.users.find({"backends.$id" : "distring"})
但是如果我想在后端对象中搜索状态怎么办?等。
db.users.find({"backends.$state" : "running"})
但是它没有用。
答案 0 :(得分:0)
MongoDB不支持联接,因此您需要分两步完成此操作。在shell中:
var ids = db.backends.find({state: 'running'}, {_id: 1}).map(function(backend) {
return backend._id;
});
var users = db.users.find({'backends.$id': {$in: ids}}).toArray();
另外,对于ObjectId
数组元素,您可能最好使用普通DBRef
代替backends
,除非该数组中的ID实际可以引用多个馆藏的文档。