首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Mongo聚合$lookup

Mongo聚合$lookup
EN

Stack Overflow用户
提问于 2022-06-21 11:55:01
回答 1查看 57关注 0票数 1

我有一个标记集合和一个对象集合,这些对象具有这些标记的数组。我正在尝试获取一个标签列表,并列出使用它们的项目列表。

标签:

代码语言:javascript
复制
{
...
 "tag":"test"
...
}

目的:

代码语言:javascript
复制
{
...
 "tags": ["test", "test_1"]
...
}

预期结果:

代码语言:javascript
复制
{
...
 "tag": "test",
 "objects": [
   {
    ...
    "tags": ["test", "test_1"]
    ...
   }
  ]
...
}

我正在尝试执行以下查找。

代码语言:javascript
复制
{
  from: 'object',
  let: {
    tag: "$tag"
  },
  pipeline: [
      { $match: {
          $expr: { 
            $eq: ["$tags", "$$tag"] 
          }
        } 
      }
  ],
  as: 'objects'
}

但他并没有把他们团结起来。如果tags不是一个数组,而是一个字符串,那么上面的查找就可以了,但是我需要它是一个数组。如果我用$eq替换$in,它会抱怨预期的第二个参数是一个字符串,但它需要一个数组。交换参数($in: ["$$tag", "$tags"])也不能工作。我不知道该怎么做才对。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-06-21 14:28:24

您可以使用$in

代码语言:javascript
复制
db.tag.aggregate([
  {
    "$lookup": {
      from: "object",
      let: {
        tag: "$tag"
      },
      pipeline: [
        {
          $match: {
            $expr: {
              $in: [
                "$$tag",
                "$tags"
              ]
            }
          }
        }
      ],
      as: "objects"
    }
  }
])

Working 蒙戈游乐场

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

https://stackoverflow.com/questions/72700324

复制
相关文章

相似问题

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