[英]Add new field to sub document in $Project stage
我正在選擇一個文檔,想要修改內部子文檔,但顯示錯誤
{MongoError:無法為lastCheckin的子字段添加表達式,因為已經有一個表達式適用於整個字段
var req = { user : {id : ObjectId("5a03f9a0fafa645c8a39934c")}}
User.aggregate([
{
$match:{
_id: ObjectId(req.user.id)
}
},
{
$lookup:{
from: 'status',
localField: 'lastCheckin._id',
foreignField: '_id',
as: 'checkin'
}
},
{
$project : {
name:1,
lastCheckin: { $arrayElemAt:[ "$checkin",0]},
"lastCheckin.isLiked": {$literal:1}
}
},
])
.exec((err,results)=>{
console.dir({
err:err,
results:JSON.stringify(results)
});
})
而lastCheckin為空/空或
{
"_id" : ObjectId("5a44e37fb746931a585dd62c"),
likes: [ObjectId("5a44e37fb746931a585dd62c"), ...]
...
},
注意:$ lookup可以按預期工作,我正在獲取lastChecin,但不允許在lastCheckin中添加isLiked鍵
不幸的是,無法按照您在3.2版本中想要的方式進行操作。
您必須輸出加入文檔中的所有投影字段,並添加新字段。
就像是
{"$project":{
"name":1,
"lastCheckin":{
"$let":{
"vars":{"lastCheckin":{"$arrayElemAt":["$checkin",0]}},
"in":{
"otherfield1":"$$lastCheckin.otherfield1",
"otherfield2":"$$lastCheckin.otherfield2",
"isLiked":{"$literal":1}
}
}
}
}}
3.6解決方案:
{"$project":{
"name":1,
"lastCheckin":{
"$mergeObjects":[
{"$arrayElemAt":["$checkin",0]},
{"isLiked":{"$literal":1}}
]
}
}}
3.4解決方案
{"$project":{
"name":1,
"lastCheckin":{"$arrayElemAt":["$checkin",0]},
}},
{"$addFields":{"lastCheckin.isLiked":{"$literal":1}}}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.