我是Mongo的新手。发布此问题是因为我不确定如何在Google上搜索此内容
我有一本书籍文件如下
{
bookId: 1
title: 'some title',
publicationDate: DD-MM-YYYY,
editions: [{
editionId: 1
},{
editionId: 2
}]
}
和另一个像这样的
{
bookId: 2
title: 'some title 2',
publicationDate: DD-MM-YYYY,
editions: [{
editionId: 1
},{
editionId: 1
}]
}
我想编写一个查询db.books.find({})
,该查询只会返回那些已为图书复制editions.editionId
的图书。
因此,在此示例中,对于bookId: 2
,有两个版本editionId:1
。
有什么建议吗?
答案 0 :(得分:0)
您可以使用聚合框架;具体来说,您可以使用$group运算符按照书籍和版本ID将记录分组,并计算它们出现的次数:如果计数大于1,则表示您发现了重复。< / p>
以下是一个例子:
db.books.aggregate([
{$unwind: "$editions"},
{$group: {"_id": {"_id": "$_id", "editionId": "$editions.editionId"}, "count": {$sum: 1}}},
{$match: {"count" : {"$gt": 1}}}
])
请注意,这不会返回整本图书记录,但会返回其标识符;然后,您可以在后续查询中使用这些来获取整个记录,或者执行一些重复数据删除。