【问题标题】:How can I check for duplicate documents in Mongoose?如何在 Mongoose 中检查重复文件?
【发布时间】:2017-09-25 02:01:29
【问题描述】:

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

"person" : [
  {
    "title" : "front-end developer",
    "skills" : [
      {
        "name" : "js",
        "project" : "1",
      },
      {
        "name" : "CSS",
        "project" : "5",
      }
    ]
  },
  {
    "title" : "software engineer",
    "skills" : [
      {
        "name" : "Java",
        "project" : "1",
      },
      {
        "name" : "c++",
        "project" : "5",
      }
    ]
  }
]

是否有一种简单的方法可以确定其他文档是否与该对象相同,例如具有相同的键、值和数组索引?目前我检查重复的方法很长,需要多个嵌套循环。任何帮助将不胜感激。谢谢!

【问题讨论】:

  • 可惜没有,得自己比较。 here
  • 您到底想知道什么?您想知道您的数据库中是否已经有重复的文档吗?或者您想检查您的数据库中是否有与您尝试插入的文档相匹配的文档?还是别的什么?
  • 谢谢@GrégoryNEUT 我会检查一下思考链接。谢谢!
  • 嗨@dnickless,我正在尝试找出后者。我的集合中已经有一个文档,我需要查询所有其他文档以在键、值和索引排序方面找到相同的匹配项。谢谢!

标签: node.js mongodb mongoose


【解决方案1】:

如果您想在您的集合中获取相同(显然,_id 字段除外)文档的列表,您可以这样做:

collection.aggregate({
    $project: {
        "_id": 1, // keep the _id field where it is anyway
        "doc": "$$ROOT" // store the entire document in the "doc" field
    }
}, {
    $project: {
        "doc._id": 0 // remove the _id from the stored document because we do not want to compare it
    }
}, {
    $group: {
        "_id": "$doc", // group by the entire document's contents as in "compare the whole document"
        "ids": { $push: "$_id" }, // create an array of all IDs that form this group
        "count": { $sum: 1 } // count the number of documents in this group
    }
}, {
    $match: {
        "count": { $gt: 1 } // only show what's duplicated
    }
})

与聚合框架一样,您可以通过注释掉所有步骤然后逐步再次激活所有内容来尝试了解每个步骤中究竟发生了什么。

【讨论】:

  • 非常感谢您的回答@dnickless!我将不得不研究聚合框架,因为它对我来说是新事物。请问,如果技能数组中的对象包含嵌套的对象数组,我将如何修改聚合函数?谢谢!
  • 我认为您不需要更改任何内容。我的解决方案是完全通用的。它不对您的文档结构做任何假设。
  • 太棒了,非常感谢您的帮助,再次感谢!
  • 嘿@dnickless!我一直在玩弄你的答案,遇到了另一个问题,我在这里发布了一个问题:stackoverflow.com/questions/46412412/…。你介意看看吗?和这个问题很相似,我被难住了!
猜你喜欢
  • 1970-01-01
  • 2016-07-24
  • 1970-01-01
  • 2012-01-25
  • 2018-10-29
  • 2017-08-17
  • 2011-05-19
  • 2017-05-13
相关资源
最近更新 更多