【问题标题】:How can I check for duplicate nested arrays inside of documents in Mongoose?如何在 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 的答案,但它返回了我的所有文档,而不是在技能数组中具有相同内容的文档。请问您知道为什么吗?

标签: arrays node.js mongodb


【解决方案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 感谢您的回答!我想知道使用聚合函数是否可能以及更有效?
    • 这取决于你想对匹配的文档做什么。见:stackoverflow.com/a/28364709
    • 我在这里写了一个类似的问题:stackoverflow.com/questions/46396614/…。本质上,我是要查询包含重复数据的文档。在这种情况下,它是技能数组。所以我想找到仅具有相同技能数组结构的其他用户,例如相同数量的项目,相同的键,例如名称和相同的值,例如js。您可以将其视为快照。让我知道这是否有意义!
    猜你喜欢
    • 1970-01-01
    • 2015-04-18
    • 1970-01-01
    • 2016-10-06
    • 1970-01-01
    • 2017-02-24
    • 2015-12-19
    • 2014-01-29
    • 2012-06-23
    相关资源
    最近更新 更多