【问题标题】:Mongo DB Query to check if document array field element present in more than one documentMongodb查询以检查文档数组字段元素是否存在于多个文档中
【发布时间】:2018-08-16 17:53:00
【问题描述】:

我一直在搜索具有各种术语组合的 MongoDB 查询语法,以查看是否可以找到适合我想要创建的查询类型的语法。

我们有一个包含带有数组字段的文档的集合。此数组字段包含与文档关联的项目的 ID。

我希望能够检查一个项目是否关联了多次。如果它有那么多个文档将在其数组字段中存在 id 元素。

我事先不知道要检查的 id,因为我不知道哪些项目关联了多次。我正在尝试检测这一点。查询数组字段中具有特定值的所有文档会相对简单。

我需要的是一些查询,它可以返回其数组字段的元素之一也存在于不同文档的数组字段中的所有文档。

我不知道该怎么做。在 SQL 中,可能有子查询。在 Mongo 查询语言中,我不知道该怎么做,甚至不知道可以做到。

【问题讨论】:

    标签: arrays mongodb duplicates mongodb-query


    【解决方案1】:

    在 3.6 mongo 版本中,您可以使用 $lookup 自行加入行并在匹配时输出文档,并使用 $project 排除以删除加入的字段。

    $push[] 数组不相等匹配到有匹配文档的输出文档。

    db.col.aggregate([
      {"$unwind":"$array"},
      {"$lookup":{
        "from":col,
        "localField":"array",
        "foreignField":"array",
        "as":"jarray"
      }},
    
      {"$group":{
        "_id":"$_id",
        "fieldOne":{"$first":"$fieldOne"},
        ... other fields
        "jarray":{"$push":"$jarray"}
      }},
      {"$match":{"jarray":{"$ne":[]}}},
      {"$project":{"jarray":0}}
    ])
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-11-27
      • 1970-01-01
      • 2019-03-04
      • 2021-12-21
      • 1970-01-01
      • 2022-01-05
      • 2023-03-07
      相关资源
      最近更新 更多