【问题标题】:why is nothing returned when using $match?为什么使用 $match 时没有返回任何内容?
【发布时间】:2021-07-20 19:15:49
【问题描述】:

为什么使用$match时什么都没有返回?

{
  $lookup: {
    from: 'users',
    as: 'user',
    let: {
      "blogIds": "$blog.id"
    },
    pipeline: [{
        $project: {
          id: 1,
          user_name: 1,
          picture: 1,
          blogs: 1
        },
      },
      {
        $match: {
          $expr: {
            $in: ["$$blogIds", "$blogs"]
          }
        }
      }
    ]
  }
}

如果我删除$match 并添加$addFields,我会得到以下结果:

{
  $lookup: {
    from: 'users',
    as: 'user',
    let: {
      "blogIds": "$blog.id"
    },
    pipeline: [{
        $project: {
          id: 1,
          user_name: 1,
          picture: 1,
          blogs: 1
        },
      },
      {
        $addFields: {
          field: "$$blogIds"
        }
      },
    ]
  }
}

文档示例:

【问题讨论】:

    标签: javascript mongodb mongoose mongodb-query aggregation-framework


    【解决方案1】:

    问题 - blog.id 是数组,但您只需要值。

    所以提取值并使用

    选项 1

    let: {
        "blogIds": { $arrayElemAt: [ "$blog.id", 0 ] }
    }
    

    选项-2

    {
        $match: {
          $expr: {
            $in: [ { $arrayElemAt: [ "$$blogIds", 0 ] }, "$blogs"]
          }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-05-11
      • 2021-04-14
      • 1970-01-01
      • 2019-09-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多