2016-12-06 33 views
1

我的文件是这样的:如何从子数组中提取所有子元素?

// collection: photos 
{ 
    "_id" : ObjectId("5835840fb6ca90e020020b22"), 
    "customerIds" : [ 
     { 
      "code" : "SHDR327D7DVKHBT3", 
      "cType" : "photoPass", 
      "userIds" : ['aaa','bbb'] 
     }, 
     { 
      "code" : "SHDR327D7DVKHBT3", 
      "cType" : "photoPass", 
      "userIds" : ['ddd','aaa','ccc'] 
     } 
    ] 
} 

customerIds两个文件是相同的。现在我想从userIds中删除所有'aaa',我怎样才能在一个命令中实现这一点?

我用这个命令删除它们,但一次只能删除一个。

db.photos.update(
     {"customerIds.code":'SHDR327D7DVKHBT3',"customerIds.userIds":'aaa'}, 
     {$pull: {"customerIds.$.userIds":{$in:['aaa']}}}, 
     { multi: true,upsert: false} 
) 

回答

0

这是你想要做的吗?

db.testCollection.aggregate([ 
    {$unwind: "$customerIds"}, 
    {$unwind:"$customerIds.userIds"}, 
    {$match:{"customerIds.userIds":"aaa"}}, 
    {$project:{"customerIds.userIds":1,_id:0}} 
]) 

这将返回你的“AAA”:

{ 
     "_id" : ObjectId("584708e6888ff31225c2e375"), 
     "customerIds" : { 
       "userIds" : "aaa" 
     } 
} 
{ 
     "_id" : ObjectId("584708e6888ff31225c2e375"), 
     "customerIds" : { 
       "userIds" : "aaa" 
     } 
} 
+0

谢谢你回答我的问题,但其实我想知道的是如何删除他们... –

相关问题