2016-11-28 2 views
0

У меня проблема с дизайном.Заполнение данных из одной коллекции в другую Meteor Js

Say ивы получил две коллекции:

Colletion A stores apples (_id , appleName) 

Collection B stores apple votes (_id , apple_id , enum(0,1)) 

Я хотел бы затем вернуться коллекцией А с свертком из коллекции B на основе apple_id вернуть значение 0 до 1-х как свойство на главном объекте , (Как балл)

Пример данных:

коллекция Массив

[{_id : 1, appleName : 'grannySmith'},{_id : 2, appleName : 'greenApple'},{_id : 3, appleName : 'anotherApple'}] 

коллекция Б массив

[{_id : 1, appleId : 1, vote : 0}, {_id : 2, appleId : 1, vote : 1}, {_id : 3, appleId : 1, vote : 1}] 

Из этого Im ищет коллекцию A, чтобы вернуться с сокращения из B

коллекция A массив с уменьшением

[{_id : 1, appleName : 'grannySmith', score : 2},{_id : 2, appleName : 'greenApple'},{_id : 3, appleName : 'anotherApple'}] 

Смотрите, как он теперь имеет 2 балл из уменьшения коллекции B с связанными идентификаторами

+0

Вы должны включить некоторые данные образца и ожидаемый результат на основе этих данных. – Khang

+0

@ Khang cheers, просто добавил некоторые из них. –

ответ

0

Вы могли бы использовать агрегацию для ее достижения:

db.apple.aggregate([ 
    { 
    $lookup: { 
     from: 'score', 
     localField: '_id', 
     foreignField: 'appleId', 
     as: 'scores', 
    }, 
    }, { 
    $unwind: { 
     path: '$scores', 
     preserveNullAndEmptyArrays: true, 
    }, 
    }, { 
    $group: { 
     _id: '$_id', 
     appleName: { 
     $first: '$appleName', 
     }, 
     score: { 
     $sum: '$scores.vote', 
     } 
    }, 
    } 
]) 

Примечания: Я использую $lookup в первый этап этого агрегации, вам нужно использовать Mongo 3.2 или выше, чтобы он работал.

+0

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

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