簡體   English   中英

使用條件 localField 查找

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM