首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带条件的mongodb聚合多重查找

带条件的mongodb聚合多重查找
EN

Stack Overflow用户
提问于 2022-04-26 15:41:19
回答 1查看 1.1K关注 0票数 1

我有三个收藏品。

代码语言:javascript
复制
db.a.insert([
  { "_id" : ObjectId("5b56989172ebcb11105e8f41"), "db_type":b, "number" : 1},
  { "_id" : ObjectId("5b56989172ebcb11105e8f42"), "db_type":c, "number" : 2},
])

db.b.insert([
  { "_id" : ObjectId("5b56989172ebcb11105e8f43"), "number" : 1, "value" : "111"},
])

db.c.insert([
  { "_id" : ObjectId("5b56989172ebcb11105e8f44"), "number" : 2, "value" : "222"},
])

我想做一个查找查询,根据db_type从每个集合中获取值。

在这种情况下我该怎么办?

结果:

代码语言:javascript
复制
{ "_id" : ObjectId("5b56989172ebcb11105e8f41"), "db_type" : b, "number" : 1, "value" : "111"}
{ "_id" : ObjectId("5b56989172ebcb11105e8f42"), "db_type" : c, "number" : 2, "value" : "222"}

堵塞部分..。

代码语言:javascript
复制
db.getCollection('a').aggregate([
    {
        "$lookup":{
            "from":         "b" or "c", // I want to give condition here.
            "localField":   "number",
            "foreignField": "number",
            "as":           "result"
        }
    },
])
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-04-26 16:06:16

对于您的情况,您只有2种情况可以查找-- bc。您可以简单地进行两个单独的查找,并使用$setUnion将结果分组。

代码语言:javascript
复制
db.a.aggregate([
  {
    "$lookup": {
      "from": "b",
      "let": {
        db_type: "$db_type",
        number: "$number"
      },
      "pipeline": [
        {
          $match: {
            $expr: {
              $and: [
                {
                  $eq: [
                    "$$db_type",
                    "b"
                  ]
                },
                {
                  $eq: [
                    "$$number",
                    "$number"
                  ]
                }
              ]
            }
          }
        }
      ],
      "as": "bLookup"
    }
  },
  {
    "$lookup": {
      "from": "c",
      "let": {
        db_type: "$db_type",
        number: "$number"
      },
      "pipeline": [
        {
          $match: {
            $expr: {
              $and: [
                {
                  $eq: [
                    "$$db_type",
                    "c"
                  ]
                },
                {
                  $eq: [
                    "$$number",
                    "$number"
                  ]
                }
              ]
            }
          }
        }
      ],
      "as": "cLookup"
    }
  },
  {
    "$addFields": {
      "allLookup": {
        "$setUnion": [
          "$bLookup",
          "$cLookup"
        ]
      }
    }
  }
])

这是供您参考的蒙戈游乐场

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72016807

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档