mongodb 与外部字段匹配的查找

mongodb lookup with foreign field match

我想知道如何查找匹配项。

我可以通过这个查询查找两个集合。

 db.category.aggregate([
 {
     $lookup:
     {
       from: "faq",
       localField: "_id",
       foreignField: "category_code",
       as: "faq"
     }
  }
])

然后我得到这个结果。

{
   "_id":ObjectId("1234"),
   "category_name":"about account",
   "faq": [
      {
          "_id":ObjectId("faq id blah blah"),
          "category_code" : ObjectId("1234"),
          "faq_title":"When you can't create account",
          "del_flg":"N"
      },
      {
          "_id":ObjectId("faq id blah blah2222"),
          "category_code" : ObjectId("1234"),
          "faq_title":"When you change your account",
          "del_flg":"N"
      },
      {
          "_id":ObjectId("faq id blah blah3333"),
          "category_code" : ObjectId("1234"),
          "faq_title":"When you lost your account",
          "del_flg":"Y"
      }
   [
}

我只想要两个常见问题解答,其中“del_flg”是“N”

我不熟悉使用mongodb。

如果我使用管道可以吗?我尝试了一些管道示例,但我做不到。

你应该试试 $lookup with pipeline,

  • let 将使用 $$
  • 创建一个变量来访问查找管道内的 id
  • 管道匹配使用 $expr 因为我们正在比较两个字段 $$id = $category_code
  • 设置匹配条件del_flg:N
db.category.aggregate([
  {
    $lookup: {
      from: "faq",
      let: {
        id: "$_id"
      },
      pipeline: [
        {
          $match: {
            $expr: {
              $eq: [
                "$$id",
                "$category_code"
              ]
            },
            "del_flg": "N"
          }
        }
      ],
      as: "faq"
    }
  }
])

游乐场:https://mongoplayground.net/p/gUVUMk6KIAV