2014-11-18 3 views
0

Если у меня есть полезная нагрузка:Ведение графа на массив объектов

{ 
    "objs": [ 
     { "_id": "1234566", "some":"data" }, 
     { "_id": "1234566", "some":"data" }, 
     { "_id": "2345666", "some":"otherdata" }, 
     { "_id": "4566666", "some":"yetotherdata" }, 
    ] 
} 

Что бы лучший фильтр, чтобы получить все объекты с идентификатором: «1234566»?

+0

фильтр '{_id:" 1234566 "}'? –

ответ

0

Чтобы найти все документы, имеющие в качестве obj с _id как 1234566:

db.collection.find({"objs._id":"1234566"}); 

Чтобы отфильтровать obj элементы, имеющие указанный _id, для документа. Предполагая, что ваш документ имеет атрибут _id.

db.collection.aggregate([ 
{$unwind:"$objs"}, 
{$match:{"objs._id":"1234566"}}, 
{$group:{"_id":"_id","objs":{$push:{"id":"$objs._id","some":"$objs.some"}}}}, 
{$project:{"_id":0,"objs":1}} 
]) 

Вы можете изменить _id в $group этапе, если вы хотите, чтобы группы на основе какой-то другой области.

Смежные вопросы