2016-02-03 2 views
3

У меня возникли проблемы с балансом всех моих учетных записей. Все учетные записи имеют ссылки на различные пункты депозита при сборе депозитов. КоллекцияMongoDB: сумма всех предметов в коллекции, на которую делается ссылка.

Accounts: коллекция

[{ 
    "_id": "56b1ce63315748b44f1174e1", 
    "name": "Foo bar", 
    "deposits": [ 
     { 
      "$oid": "56b1ce78315748b44f1174e2" 
     } 
    ] 
}] 

Депозиты:

{ 
    "_id": { 
     "$oid": "56b1deb84f40bfa435e22f3f" 
    }, 
    "account": { 
      "$oid": "56b1dea34f40bfa435e22f3e" 
    }, 
    "amount": 300, 
    "date": { 
     "$date": "2016-02-01T00:00:00.000Z" 
    } 
} 

Я пытался объединить запрос, но он всегда возвращает баланс: 0. Я думаю, мне нужно, чтобы заполнить этот пункт до использование совокупности. Но как мне это сделать?

Accounts.aggregate([ 
    { $unwind: "$deposits" }, 
    { 
     $group: { 
      _id: "$_id", 
      name: { "$first": "$name" }, 
      balance: { $sum: "$deposits.amount" } 
     } 
    }]) 

Решение:

{ 
    $lookup: 
    { 
     from: 'deposits', 
     localField: 'amount', 
     foreignField: 'deposits', 
     as: 'deposits' 
    }, 
}, 
{ $unwind: "$deposits" }, 
{ 
    $group: { 
     id: "$_id", 
     name: { "$first": "$name" }, 
     balance: { $sum: "$deposits.amount" } 
    } 
} 
+0

В коллекции 'Accounts' я не вижу ключа' amount'. – dikesh

+0

Входит в состав вкладов – bjorkblom

+0

Что представляет собой символ 'помощник' в коллекции вкладов? Это то же самое, что и ссылка на идентификатор учетной записи? – chridam

ответ

1

Вы должны использовать оператор $lookup для того, чтобы присоединиться к две коллекции, текущий подход не работает. Оператор $lookup доступен только в Mongo 3.2 и выше.

{ 
    $lookup: 
    { 
     from: <collection to join>, 
     localField: <field from the input documents>, 
     foreignField: <field from the documents of the "from" collection>, 
     as: <output array field> 
    } 
} 
+0

Спасибо, что сработало! – bjorkblom

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