如何在 Mongoose 的文档中检查重复的嵌套数组?

Posted

技术标签:

【中文标题】如何在 Mongoose 的文档中检查重复的嵌套数组?【英文标题】:How can I check for duplicate nested arrays inside of documents in Mongoose? 【发布时间】:2017-09-25 19:01:36 【问题描述】:

这是我收藏中的嵌套文档示例:


  "title" : "front-end developer",
  "age" : 25,
  "name" : "John",
  "city" : "London",
  "skills" : [
    
      "name" : "js",
      "project" : "1",
      "scores" : [
        
          max: 76,
          date: date
        ,
        
          max: 56,
          date: date
        
      ]
    ,
    
      "name" : "CSS",
      "project" : "5",
      "scores" : [
        
          max: 86,
          date: date
        ,
        
          max: 36,
          date: date
        ,
        
          max: 56,
          date: date
        ,
      ]
    
  ]

是否有一种简单的方法可以确定其他文档是否仅具有与skills 数组相同/重复的结构?例如具有相同的键、值和数组索引?任何帮助将不胜感激。谢谢!

【问题讨论】:

只需在skills 数组上使用$group 即可获取具有相同skills 数组的所有文档。类似db.collection_name.aggregate("$group":"_id":"$skills", "_ids":"$push":"$$ROOT") 嘿@Veeram 感谢您的回答,我会试一试并告诉您:) 你好,前几天我回答了你的问题,你也让我看看这个问题。我认为,您从@Veeram 获得的“评论”是正确答案。不知道,为什么他不这样发布。 嘿@dnickless,感谢您的回复。我确实尝试了 Verram 的答案,但它返回了我的所有文档,而不是在技能数组中具有相同内容的文档。请问您知道为什么吗? 【参考方案1】:

你是这样得到的:

collection.aggregate(
    "$group": 
        "_id": "$skills",
        "docs": 
            "$push": "$$ROOT"
        ,
        "count": 
            $sum: 1
        
    
, 
    $match: 
        "count": 
            $gt: 1
        
    
)

【讨论】:

【参考方案2】:

如果您正在寻找具有相同技能的开发人员,您可以使用$all 运算符:

var john = db.developers.findOne(...);
var devs = db.developers.find( 'skills.name':  $all: john.skills.map(x => x.name)  );

【讨论】:

嘿@Xiaoy312 感谢您的回答!我想知道使用聚合函数是否可能以及更有效? 这取决于你想对匹配的文档做什么。见:***.com/a/28364709 我在这里写了一个类似的问题:***.com/questions/46396614/…。本质上,我是要查询包含重复数据的文档。在这种情况下,它是技能数组。所以我想找到仅具有相同技能数组结构的其他用户,例如相同数量的项目,相同的键,例如名称和相同的值,例如js。您可以将其视为快照。让我知道这是否有意义!

以上是关于如何在 Mongoose 的文档中检查重复的嵌套数组?的主要内容,如果未能解决你的问题,请参考以下文章

Mongoose 可选嵌套属性 - 检查空/未定义?

Mongoose 可选嵌套属性 - 检查空/未定义?

如何在nestjs mongoose typescript中引用嵌套文档

如何从深度嵌套的文档中 $pull (mongoose)

如何填充嵌套的 Mongoose 嵌入文档

使用 Mongoose 查询嵌套的嵌入文档