我有两个收藏
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'
}
第2个集合中只有1个字段。
最佳答案
请看看这个。
变体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”和第一个集合的其他字段。
关于javascript - 如何仅从另一个集合中检索几个字段,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54441053/