【问题标题】:$in/$eq in mongo pipeline $lookup is not workingmongodb 管道 $lookup 中的 $in/$eq 不起作用
【发布时间】:2021-04-27 14:03:26
【问题描述】:

我有一个集合details,在quotes_id 上有一个字符串值数组,如下所示

{
    "quantity": 2000,
    "quotes_id": ["SQ-CPQ10037"],
    "status": "processed",
    "logs": [""],
    "product_id": "5ff5cf3dc1ceb9144901da81"
}

还有我的quotes 收藏

{
    "_id":"SQ-CPQ10037",
    "product_id":"5ff5cf3dc1ceb9144901da81",
    ...more fields here
}

现在,我正在尝试使用如下查找管道从另一个名为 quotes 的集合中访问此集合

$lookup: {
     from: "details",
     "let": { "product_id": "$quotes.product_id", "quotes_id": "$quotes._id"},
     pipeline: [
     { 
         $match: { 
            $expr: { 
               $and: [
                 { $in: [ "$quotes_id",  ["$$quotes_id"] ] },
                 { $eq: [ "$product_id",  "$$product_id" ] },
               ]
            }
         }
     }],      
     as: "product.productquotes",
},

这是返回空集合。但是,如果我评论该行

{ $in: [ "$quotes_id",  ["$$quotes_id"] ] },

然后它会将记录返回给我。我还尝试使用简单的$eq 来处理quotes_id,但结果相同。但是如果我直接运行查询就像

{$and: [{"product_id": ObjectId('5ff5cf3dc1ceb9144901da81')}, {"quotes_id": "SQ-CPQ10037"}]}

在 mongo compass 上,我收到记录没有任何问题。

【问题讨论】:

  • 你为什么用[ ]$$quote_id 包装? $quotes 是一个对象吗?
  • 因为,我用过$in。我尝试使用不带数组括号的 $eq 。结果相同。

标签: javascript node.js mongodb mongoose nosql


【解决方案1】:

你做的几乎是正确的。但是错误地写了$in args。 in 的第二个参数应该是一个数组。

{
  $in: [
    "$$quotes_id",
    "$quotes_id"
  ]
}

所以查找喜欢

db.quotes.aggregate([
  {
    $lookup: {
      from: "details",
      "let": { "product_id": "$product_id", "quotes_id": "$_id" },
      pipeline: [
        {
          $match: {
            $expr: {
              $and: [
                {  $in: [ "$$quotes_id", "$quotes_id" ] },
                {  $eq: [ "$product_id", "$$product_id" ] }                
              ]
            }
          }
        }
      ],
      as: "product.productquotes"      
    }
  }
])

工作Mongo playground

【讨论】:

    猜你喜欢
    • 2019-07-20
    • 2020-02-20
    • 1970-01-01
    • 2021-12-01
    • 2018-12-20
    • 1970-01-01
    • 1970-01-01
    • 2017-04-15
    • 2018-08-06
    相关资源
    最近更新 更多