0

Я действительно хотел, чтобы заполнить то совокупныйЗаселите затем aggreagate в мангуста

Comps.find().populate({ 
     path : "reviews", 
     model : "Review" 
    }).exec(function(err, populatedData){ 
     if(err) console.log(err) 
     console.log("populatedData--", populatedData) 
    }).aggregate([ 
     {$unwind : "$reviews"} 
    ]).exec(function(err, doc){ 
     if(err) throw err; 
     console.log("statements from aggregate", doc) 
    }) 

Я добавить идентификатор объекта обзора в reviews массив коллекции Comps когда-либо пользователь делает обзор. и теперь я заполняю обзоры внутри Comp. Я хотел сделать общий материал в обзорах.

Я вижу в this question Я не могу сделать это из-за клиентской и серверной частей, но я не знаю, как это исправить.

В ответ на этот вопрос в основном делается собственный метод заполнения для сборки коллекции? когда он использует $lookup?

Это один из докторов от > db.comps.find().pretty()

{ 
     "_id" : ObjectId("579706567f9c8cbc07482e65"), 
     "name" : "comp1", 
     "industry" : "industry1", 
     "anonUsers" : [ ], 
     "users" : [ ], 
     "reviews" : [ 
       "57ad8c4353ef022423dcdadb", 
       "57ad98e5cdc0ec7009530519", 
       "57ad997e51c65ab8283d9c19", 
       "57ad99f3480d0ffc141ffdf3", 
       "57ad9aafcba3fb3029b22b19", 
       "57ad9b953643bbb428034966", 
       "57ad9d022ac828040b51f824", 
       "57ad9d362bd44db8226efd47", 
       "57ad9e6f000e02082adf1110", 
       "57ad9fa3e4c8a91c20e8b805", 
       "57ada040717ddc10250b2255", 
       "57ada069e3f0f96422253364", 
       "57adf85d6312904c0ee62ae5", 
       "57adfce8b9be606007c073b1", 
       "57adff001600b53c0fe74d35" 
     ], 
     "__v" : 16 
} 

здесь один за db.reviews.find().pretty()

{ 
     "_id" : ObjectId("57adff001600b53c0fe74d35"), 
     "updatedAt" : ISODate("2016-08-12T16:53:30.510Z"), 
     "createdAt" : ISODate("2016-08-12T16:53:20.318Z"), 
     "vote" : "up", 
     "reviewText" : "coolio again", 
     "company" : ObjectId("579706567f9c8cbc07482e65"), 
     "companyName" : "comp1", 
     "userType" : "anon", 
     "user" : ObjectId("57adfef51600b53c0fe74d34"), 
     "statements" : [ 
       { 
         "name" : "statement3", 
         "question" : "This is the question for statement3", 
         "result" : 8 
       }, 
       { 
         "name" : "statement4", 
         "question" : "This is the question for statement4", 
         "result" : 7 
       }, 
       { 
         "name" : "statement6", 
         "question" : "This is the question for statement6", 
         "result" : 6 
       } 
     ], 
     "__v" : 1, 
     "className" : "thisUser", 
     "momented" : "a few seconds ago" 
} 

EDIT Я попытался сделать это по ссылке. Это просто дает мне comps, а обзоры - список идентификаторов. reviews должен быть массивом объектов. Объектами должны быть обзоры коллекции reviews. Как население

Comps.aggregate([ 
    {"$lookup": { 
     "from" : "Reviews", 
     "localField" : "_id", 
     "foreignField": "_id", 
     "as": "returndComp" 
    }} 
], function(err, result){ 
    if(err) throw err; 
    console.log("result", result) 
}) 
+0

Не могли бы вы привести пример нескольких входных документов? –

+0

Я добавил кое-что к вопросу. надеюсь, что это помогает –

ответ

0

Как указано связанный ответ, вы не можете сделать populate() затем aggregate(), но вы можете использовать certianly $lookup добиться того, что вам нужно. Поскольку reviews - это массив, вам нужно добавить стадию $unwind в ваш трубопровод.

Дополнительный $unwind этап в конце концов, чтобы сгладить поле массива из трубопровода в $lookup.

Следующий пример показывает это:

Comps.aggregate([ 
    { "$unwind": "$reviews" }, 
    { 
     "$lookup": { 
      "from": "Reviews", 
      "localField": "reviews", 
      "foreignField": "_id", 
      "as": "review" 
     } 
    }, 
    { "$unwind": "$review" }, 
]).exec(function(err, doc){ 
    if(err) throw err; 
    console.log("statements from aggregate", doc) 
}); 
+0

'console.log (« statement from aggregate », doc)' дает мне пустой массив .. 'statement from aggregate []' .. Спасибо за вашу помощь. –

+0

Я изменил настройку для ключа 'from' оператора' $ lookup' из ': from": "reviews", 'to' "from": "Reviews", 'поскольку это то, что вы написали в качестве основного имя коллекции в вашем 'aggregate()' attemtpt. Попробуйте это и посмотрите, как это происходит. – chridam

+0

имя коллекций 'отзывы' нет коллекции под названием' Reviews' Я предполагаю, что вы изменили ее на это, потому что вы видели мое редактирование в вопросе. Я думаю, что это должны быть «обзоры». Я получаю тот же пустой массив. –

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