[英]lookup with conditional localField
StaffOneToOne.aggregate([
{"$match": {$or: [{ fromStaffId: req.user._id }, { toStaffId: req.user._id }]}},
{$cond:{
if:{fromStaffId:req.user._id},
then:{$lookup: {
from: 'pharmacists',
localField: 'fromStaffId',
foreignField: '_id',
as: 'p_list'
}},
else:{$lookup: {
from: 'pharmacists',
localField: 'fromStaffId',
foreignField: '_id',
as: 'p_list'}}
}}
])
{
"_id" : ObjectId("6310901b86c6077c5d3be84f"),
"message" : "Hello Hau",
"date" : 1662029851620.0,
"messageType" : 0,
"staffType" : 0,
"isSeen" : 0,
"image" : "",
"toStaffId" : ObjectId("60c8908ef1c80777f6c78460"),
"fromStaffId" : ObjectId("608599c361480b4cc2dd4946"),
"sentBy" : ObjectId("608599c361480b4cc2dd4946"),
"createdAt" : ISODate("2022-09-01T10:57:31.902Z"),
"updatedAt" : ISODate("2022-09-01T10:57:31.902Z"),
"__v" : 0
}
我正在嘗試使用查找填充 fromStaffId 和 toStaffId 但在我的情況下,當我的 id 與 fromStaffId 匹配時,我必須填充 toStaffId ,反之亦然,我試圖放置不起作用的條件查找我的代碼是
您可以使用此值設置字段:
db.StaffOneToOne.aggregate([
{$match: {$or: [{fromStaffId: req.user._id}, {toStaffId: req.user._id}]}},
{$addFields: {
localField: {
$cond: [
{$eq: ["$fromStaffId", req.user._id]},
"$toStaffId",
"$fromStaffId"
]
}
}
},
{$lookup: {
from: "pharmacists",
localField: "localField",
foreignField: "_id",
as: "p_list"
}
}
])
看看它在操場上的例子是如何工作的
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.