mongodb - 检查具有内部数组的文档数组的某些字段的重复项
问题描述
我有2个对象,
{
_id: ObjectId("5cd9010310b80b3e38cd3f88")
subGroup: [
bookList: [
{
title: "A good book",
id: "abc123"
}
]
]
}
{
_id: ObjectId("5cd9010710b80b3e38cd3f89")
subGroup: [
bookList: [
{
title: "A good book",
id: "abc123"
}
]
这是 2 个不同的对象。我想检测这两个标题重复的对象的出现(例如相同)。
我试过这个查询
db.scope.aggregate({"$unwind": "$subGroup.bookList"}, {"$group" : { "_id": "$title", "count": { "$sum": 1 } } }, {"$match": {"id" :{ "$ne" : null } , "count" : {"$gt": 1} } })
我查看了stackoverflow上的其他线程。但是,它不会给我任何回报。我该如何解决这个问题?
解决方案
这里有几个问题:
$unwind
subGroup
应该subGroup.bookList
单独运行- 在指定阶段时
_id
,$group
您应该使用完整路径 (subGroup.bookList.title
) - 在您的
$match
阶段,您要检查_id
(notid
) 是否是$ne
null
尝试:
db.col.aggregate([
{"$unwind": "$subGroup"},
{"$unwind": "$subGroup.bookList"},
{"$group" : { "_id": "$subGroup.bookList.title", "count": { "$sum": 1 } } },
{"$match": { "_id" :{ "$ne" : null } , "count" : { "$gt": 1} } }
])
推荐阅读
- angular - Ionic3 - 如何更新动态 ngModel 的值?
- python - UnicodeEncodeError AND TypeError:只能将 str(不是“字节”)连接到 str
- r - 投资组合回测的风险价值
- angular - Ionic V4 - Build Prod “找不到 cordova.js 脚本标签。插件加载可能失败。”
- php - 以编辑形式管理现场人口
- oracle - 如何计算在某个日期 (M) 之前的某个日期 (X) 创建并在 (M) 之后解决的票证 (Tickets)
- java - 感兴趣的是最新版本的 JDK 不包含 tools.jar 以及在哪里可以找到它
- java - 如何在 Java 应用程序代码中构建参数化密码查询?
- drools - 是否有支持将 Drools 规则导出到 XML 的方法
- audio - Flutter:为后台执行安排音频事件