我想从引用的文档中获取字段值。 Mongodb版本是3.4。
让我们说我有2个集合foo和bar。 Foo引用了bar:
{
"_id" : ObjectId("5b6c713ea502dea387860eba"),
"stack" : "overflow",
"bar" : {
"$ref" : "bar",
"$id" : ObjectId("5b6c70e1a502dea387860ea6"),
"$db" : "stackoverflow"
}
}
相应的条形文档如下所示:
{
"_id" : ObjectId("5b6c70e1a502dea387860ea6"),
"name" : "bar-2"
}
我尝试了以下聚合函数来归档此结果:
{
"_id" : ObjectId("5b6c713ea502dea387860eba"),
"stack" : "overflow",
"barName" : "bar-2"
}
聚集功能:
db.getCollection('foo').aggregate([
{ $match: { _id: ObjectId("5b6c713ea502dea387860eba") }},
{
$lookup: {
from: 'bar',
localField: 'bar',
foreignField: '_id',
as: "bar"
}
},
{
$project: {
_id: 1,
stack: "$stack",
barName: "$bar.name"
}
}
]).pretty()
但是我的结果是这样的
{
"_id" : ObjectId("5b6c713ea502dea387860eba"),
"stack" : "overflow",
"barName" : []
}
我尝试用Google搜索它,我调查了mongodb文档,但找不到解决方案。
有什么我想念的东西吗?
谢谢!
答案 0 :(得分:1)
您需要$unwind
bar
,而且您的localField
不仅是bar.id
,而且是bar
db.getCollection('foo').aggregate([
{ "$match": { "_id": ObjectId("5b6c713ea502dea387860eba") }},
{ "$lookup": {
"from": "bar",
"localField": "bar.id",
"foreignField": "_id",
"as": "bar"
}},
{ "$unwind": "$bar" },
{ "$project": {
"_id": 1,
"stack": "$stack",
"barName": "$bar.name"
}}
])
答案 1 :(得分:0)
由于我没有找到解决问题的方法,因此找到了issue。似乎目前无法使用mongodb DBRef()字段。