簡體   English   中英

在 mongodb / mongoose 中使用條件查找“來自”

[英]Using conditional lookup 'from' in mongodb / mongoose

是否可以在 mongodb 或 mongoose 中使用條件查找源('from'),如下所示

 Collection.aggregate([
      {
        '$match': {
          'receivers.user': new ObjectId('..........')
        }
      }, {
        '$lookup': {
          'from': $switch: {
   type: [
      { case: 101, then: collection1 },
      { case: 102, then: collection2 },
   ]
}, 
          'localField': 'data.on_behalf', 
          'foreignField': '_id', 
          'as': 'data.on_behalf'
        }
      }, {
        '$unwind': {
          'path': '$data.on_behalf', 
          'preserveNullAndEmptyArrays': true
        }
      }
    ])

我想根據類型值切換我的查找集合..

如果您只有 2 種情況,則可以使用條件運算符指定要從中查找的集合:

 Collection.aggregate([
  ..., 
  {
    '$lookup': {
      'from': type == 101 ? 'collection1' : 'collection2', 
      'localField': 'data.on_behalf', 
      'foreignField': '_id', 
      'as': 'data.on_behalf'
    }
  },...

或者,如果您有更多案例,您可以在外部創建一個 switch 語句來指定集合,然后將其傳遞給聚合。 例子:

let collection_to_lookup;
switch(type) {
  case 101: collection_to_lookup = "collection1"; break;
  case 102: collection_to_lookup = "collection2"; break;
  ...
  default: collection_to_lookup = "collection1"; break;
}

Collection.aggregate([
  ..., 
  {
    '$lookup': {
      'from': collection_to_lookup, 
      'localField': 'data.on_behalf', 
      'foreignField': '_id', 
      'as': 'data.on_behalf'
    }
  },...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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