2016-10-29 2 views
0

Я хочу сделать коллекцию, которая выглядит следующим образом:Mongo db как вернуть документ в отношениях друг к другу?

{ 
    _id: "id1", 
    "name": "A" 
} 

{ 
    _id: "id2", 
    name: "B", 
    supervisor: "id1" 
} 

{ 
    _id: "id3", 
    name: "C", 
    supervisor: "id1" 
} 

Каждый человек может иметь более одного супервизора и человек не может контролировать и быть под наблюдением в то же время.

Так как я могу запросить, чтобы получить результаты в форме, как это:

{ 
    _id: "id1", 
    supervise: [ 
     { 
      _id: "id2", 
      name: "B", 
      supervisor: "id1" 
     }, 
     { 
      _id: "id3", 
      name: "C", 
      supervisor: "id1" 
     } 
    ] 
} 

ответ

0

Вы можете использовать агрегацию с группой по $supervisor и $push элементов в массиве:

db.device.aggregate(
    [ 
    { $group : { _id : "$supervisor", supervise: { $push: "$$ROOT" } } } 
    ] 
) 

Он вернет вам данные:

{ "_id" : "id1", "supervise" : [ { "_id" : "id2", "name" : "B", "supervisor" : "id1" }, { "_id" : "id3", "name" : "C", "supervisor" : "id1" } ] } 
{ "_id" : null, "supervise" : [ { "_id" : "id1", "name" : "A" } ] } 

Проверить mongodb $group aggregation