如何在 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 的文档中检查重复的嵌套数组?的主要内容,如果未能解决你的问题,请参考以下文章