检查某些字段的重复项是否具有内部数组的文档数组

时间:2019-05-13 06:12:01

标签: mongodb aggregation-framework

我有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上查看了其他线程。但是,它没有给我任何回报。我该如何解决?

1 个答案:

答案 0 :(得分:1)

这里有几个问题:

  • $unwind应该分别在subGroupsubGroup.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} } } 
])

Mongo playground