Node.js 如何在Mongoose中检查重复文档?
以下是我收藏中的嵌套文档示例:Node.js 如何在Mongoose中检查重复文档?,node.js,mongodb,mongoose,Node.js,Mongodb,Mongoose,以下是我收藏中的嵌套文档示例: "person" : [ { "title" : "front-end developer", "skills" : [ { "name" : "js", "project" : "1", }, { "name" : "CSS", "project" : "5", } ] }, { "title" : "sof
"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",
}
]
}
]
是否有一种简单的方法来确定其他文档是否与此对象相同,例如具有相同的键、值和数组索引?目前,我检查重复项的方法非常长,需要多个嵌套循环。任何帮助都将不胜感激。谢谢 如果您希望在您的收藏中获得相同(除了
\u 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
}
})
与聚合框架一样,您可以通过注释所有步骤,然后分阶段再次激活所有内容,来尝试了解每个步骤中到底发生了什么。不幸的是,没有,您必须自己进行比较。你到底想知道什么?您想知道您的数据库中是否已经有重复的文档吗?还是要检查数据库中是否有与您尝试插入的文档匹配的文档?还是别的?谢谢@GrégoryNEUT我会查看think链接。谢谢嗨@dnickless,我正在寻找后者。我的集合中已经有一个文档,我需要查询所有其他文档,以便在键、值和索引顺序方面找到相同的匹配项。谢谢非常感谢您的回答@dnickless!我必须研究聚合框架,因为它对我来说是新事物。请问,如果skills数组中的对象包含嵌套的对象数组,我将如何修改聚合函数?谢谢我想你不需要改变任何事情。我的解决方案是完全通用的。它不会对您的文档结构进行任何假设。太棒了,我真的非常感谢您的帮助,再次感谢!嘿@dnickless!我一直在玩弄你的答案,遇到了另一个问题,我在这里发布了一个问题:stackoverflow.com/questions/46412412/…。你介意看一下吗?这和这个问题很相似,我被难倒了!