我有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上查看了其他线程。但是,它没有给我任何回报。我该如何解决?
答案 0 :(得分:1)
这里有几个问题:
$unwind
应该分别在subGroup
和subGroup.bookList
上运行_id
阶段指定$group
时,应使用完整路径(subGroup.bookList.title
)$match
阶段中,您要检查_id
(不是id
)是否是$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} } }
])