2016-06-01 4 views
2

다음 형식으로 mongo 문서가 있습니다. 각 고유 한 phone_numbers에 대한 devices_ids를 가져오고 싶지만 내 mongo 쿼리가 적절한 결과를 제공하지 않습니다.mongo에서 배열로 결과 검색

누구든지 내 문제를 지적 할 수 있습니까?

{ 
    "_id" : ObjectId("56cf21562e7b232d022f334e871"), 
    "uid" : 5, 
    "device_id" : "352136234234325", 
    "name" : "user1", 
    "email" : ["[email protected]" ], 
    "phone_number" : [ 
     "+919890273451" 
    ] 
} 
{ 
    "_id" : ObjectId("56cf21562e7b2d032422f334e872"), 
    "uid" : 15, 
    "device_id" : "352136", 
    "name" : "user1", 
    "email" : [ "[email protected]"], 
    "phone_number" : [ 
     "+919890273451" 
    ] 
} 
{ 
    "_id" : ObjectId("56cf21562342e7b2d022f334e873"), 
    "uid" : 51, 
    "device_id" : "352136067208559", 
    "name" : "user1", 
    "email" : [ "[email protected]"], 
    "phone_number" : [ 
     "+919890273451" 
    ] 
} 

내 예상 출력 내가이 쿼리를 시도

{ 
"phone_number" : "+919890273451", 
device_ids : ["352136067208559","352136","352136234234325"]} 
} 

입니다 :

db.contact.aggregate([{ 
    $unwind: "$phone_number" 
}, 
{$group: {"_id":"$phone_number"}, 
device_ids: { $push: { user: "$device_id"} } 
} 
], { 
allowDiskUse:true, 
cursor:{} 
}); 

답변

1

당신이 touple 이름을 지정할 필요가 없습니다 $push를 사용하여 - 그냥 일반 값을 누릅니다.

아래를 참조하십시오 :

db.coll.aggregate([{ 
     $unwind : "$phone_number" 
    }, { 
     $group : { 
      _id : "$phone_number", 
      device_ids : { 
       $addToSet : "$device_id" 
      } 
     } 
    } 
]) 
+0

감사 교수. 그 지금 일하고있어. 그러나 $ push에서 반복적 인 device_id를 제공합니다. 고유 요소 배열로 만들 수 있습니까? –

+1

'$ addToSet' insted'$ push' - 잊어 버렸습니다 :-) @VigneshPrajapati – profesor79

+0

오오. 감사합니다 @professor! –