Mongo查询:重复键值的对象数组

时间:2018-05-03 13:09:03

标签: mongodb

我是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

有什么建议吗?

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}}}
])

请注意,这不会返回整本图书记录,但会返回其标识符;然后,您可以在后续查询中使用这些来获取整个记录,或者执行一些重复数据删除。