首页 > 解决方案 > 检查具有内部数组的文档数组的某些字段的重复项

问题描述

我有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上的其他线程。但是,它不会给我任何回报。我该如何解决这个问题?

标签: mongodbaggregation-framework

解决方案


这里有几个问题:

  • $unwindsubGroup应该subGroup.bookList单独运行
  • 在指定阶段时_id$group您应该使用完整路径 ( subGroup.bookList.title)
  • 在您的$match阶段,您要检查_id(not 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} } } 
])

蒙古游乐场


推荐阅读