首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从MongoDB中较大的集合中检索带有密钥子集的文档?

如何从MongoDB中较大的集合中检索带有密钥子集的文档?
EN

Stack Overflow用户
提问于 2020-11-29 04:29:32
回答 1查看 116关注 0票数 1

我有一个包含字符串数组的文档的数据库。类似于文档{name: "Test", keys: [["key1","key2"],["key3"],["key4", key5","key6"],["key7"]]}的东西

给定一个键列表,我希望查询数据库中每个子数组中至少有一个键的所有文档。因此,如果我要求提供所有给定键列表的文档:"key1“、"key3”、"key5“、"key7”、"key9“,则会返回上述文档,因为所有内部数组至少有一个来自查询的键。

但是,如果给出诸如"key1“、"key3”、"key7“、"key9”等键的列表,则不会返回上述文档,因为第三个内部数组不包含其中一个键。

我做了很多研究,但没有办法做到这一点。我不知道这是否可能。但是,所有的投入将是非常感谢的。谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-11-29 05:03:34

诀窍是

  • 我们将使用$keys获取$map与用户给定值之间的所有相交值。同时也得到了总数。
  • 使用$filter删除所有非元素数组,并获取计数
  • $match检查两个计数,如果两个计数相同,则可以检索文档,否则删除文档。

剧本是

代码语言:javascript
复制
db.collection.aggregate([
  {
    $addFields: {
      dupkeys: {
        "$map": {
          input: "$keys",
          in: {
            "$setIntersection": [
              "$$this",
              ["key3","key1", "key4","key7"]
            ]
          }
        }
      },
      total: {  $size: "$keys" }
    }
  },
  {
    $addFields: {
      nonMatched: {
        $size: {
          $filter: {
            input: "$dupkeys",
            cond: {
              $ne: [ "$$this", [] ]
            }
          }
        }
      }
    }
  },
  {
    $match: {
      $expr: {
        $eq: ["$total", "$nonMatched" ]
      }
    }
  }
])

Working 蒙戈游乐场

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

https://stackoverflow.com/questions/65057023

复制
相关文章

相似问题

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