我有两个收藏夹
Collection_foo:
{
cid:'1234',
'foo':'bar',
some 10+ fields...
}
Collection_bar:
{
cid:'1234',
'foobar':'barfoo',
some 10+ fields...
}
我想加入这个收藏集
我尝试使用$ lookup,$ unwind,$ project
aggregate([
{
$lookup:{
from: 'Collection_bar',
localField: 'cid',
foreignField: 'cid',
as: 'collection_foo_bar',
}
},
{ $unwind :'collection_foo_bar' },
{
$project : {
'foobar':'collection_foo_bar.foobar',
collection_foo_bar : 0 //
}
}
])
我也尝试过,但是出现错误
{
$project : {
'foobar':'collection_foo_bar.foobar',
collection_foo_bar : 0
}
}
现在我得到了
{
'foobar':'barfoo'
}
我想在哪里
{
cid:'1234',
'foo':'bar',
some 10+ fields...,
'foobar':'barfoo'
}
第二个集合中只有1个字段。
答案 0 :(得分:0)
请看看这个。 变体1。
db.Collection_foo.aggregate([
{
$lookup:{
from: "Collection_bar",
localField: "cid",
foreignField:"cid",
as: "collection_foo_bar"
},
},
{ $unwind :'$collection_foo_bar' },
{
$replaceRoot: {
newRoot: {
$mergeObjects: [ "$$ROOT",{foobar:"$collection_foo_bar.foobar"}]
}
}
},
{ $project: { collection_foo_bar: 0 } }
])
变种2
db.Collection_foo.aggregate([
{
$lookup:{
from: "Collection_bar",
localField: "cid",
foreignField:"cid",
as: "collection_foo_bar"
},
},
{ $unwind :'$collection_foo_bar' },
{
$addFields: {foobar:"$collection_foo_bar.foobar"}
},
{ $project: { collection_foo_bar: 0 } }
])
结果
{
"_id" : ObjectId("5c51a1479b70d343fb47d3ae"),
"cid" : "1234",
"foo" : "bar",
"f1" : 1.0,
"f23" : 2,
"f33" : 3,
"foobar" : "barfoo1111"
}
其中第二个集合中的“ foobar”和第一个集合中的其他字段。