我的Mongo数据库中有两个集合,Foo
包含对一个或多个Bar
的引用:
Foo: {
prop1: true,
prop2: true,
bars: [
{
"$ref": "Bar",
"$id": ObjectId("blahblahblah")
}
]
}
Bar: {
testprop: true
}
我想要的是找到至少有一个Bar
将其testprop设置为true的所有Foo
。我试过这个命令,但它没有返回任何结果:
db.Foo.find({ "bars.testprop" : { "$in": [ true ] } })
有什么想法吗?
发布于 2016-09-14 02:24:06
现在你可以在Mongo3.2中使用$lookup
完成这项工作
$lookup
有四个参数
from
:指定要执行联接的同一数据库中的集合。不能对from集合进行分片。
localField
:指定从文档输入到$lookup阶段的字段。$lookup对来自from集合的文档中的localField与foreignField执行相等匹配。
foreignField
:指定from集合中文档的字段。
as
:指定要添加到输入文档的新数组字段的名称。新的数组字段包含来自from集合的匹配文档。
db.Foo.aggregate(
{$unwind: "$bars"},
{$lookup: {
from:"bar",
localField: "bars",
foreignField: "_id",
as: "bar"
}},
{$match: {
"bar.testprop": true
}}
)
发布于 2012-03-09 01:27:52
您不能。请参阅http://www.mongodb.org/display/DOCS/Database+References
您必须在客户端完成此操作。
发布于 2016-01-11 13:44:11
好吧..。您可以使用testprop: true
查询Bar
模型以获得所有文档的_id
,然后在Foo
模型上执行查找$in
并使用从第一个查询中获得的bars
数组填充这些_id
。:P
也许这可以算作“在客户端”:P只是一种想法。
https://stackoverflow.com/questions/9621928
复制相似问题