Я использую агрегацию MongoDB в метеор.Не удается получить правильный результат при использовании агрегации MongoDB в метеор
Элементы в базе данных выглядит следующим образом:
// item1
{
products: {
aaa: 100,
bbb: 200
}
}
// item2
{
products: {
aaa: 300,
bbb: 400
}
}
Мой трубопровод выглядит следующим образом
let pipeline = [{
$limit: 10
}, {
$group: {
_id: {
// …
},
total: {
$sum: "$products.aaa"
}
}
}];
, и это работает кт. Но когда я изменить структуру базы данных для этого
// item1
{
products: [
{code: "aaa", num: 100},
{code: "bbb", num: 200}
]
}
// item2
{
products: [
{code: "aaa", num: 300},
{code: "bbb", num: 400}
]
}
Результаты, которые я получил за total
всегда 0, я думаю, что мой трубопровод неправильно. Пожалуйста, см. Комментарий внутри:
let pipeline = [{
$limit: 10
}, {
$group: {
_id: {
// …
},
total: {
$sum: "$products.0.num" // Neither this nor "$products[0].num" works
}
}
}];
Так как я могу написать его правильно? Благодаря
Мой метеорит использует монго 2.6.7. Поэтому я использую второй способ. Сначала я не понимал роль '$ eachOtherFieldForGroupingId', но теперь я получил его! Спасибо, работает отлично! –
@HongboMiao Извините, если это был абстрактный термин, но было также заявление * «...и он также будет использоваться для получения каждого поля, которое вы хотите использовать как часть ключа группировки из исходного документа ». * Поместите туда, чтобы уточнить. Наиболее распространенная ошибка конвейера агрегации - это люди, которые не понимают, что если вы хотите ссылаться поле на более позднем этапе после '$ project' или' $ group', тогда на самом деле будут доступны только те поля, которые вы действительно просили, чтобы первое использование для «emit» было действительно доступно. –
@HongboMiao. В будущем вы получите более четкое например, если вы действительно включаете образец документа и ** полное ** выражение вашего кода, а не '' _id ": {...}}, которое является неоднозначным и фактически не показывает ссылки, на которые ссылаются. Также указано" факт " , * "... который не будет связанным сервером с метеоритом, но стоит остановить использование отдельного экземпляра сервера * *, который, хотя может быть« простым », просто запускать связанный сервер с« метеор »внутри ваш проект в разработке, развертывания в реальном мире будут использовать внешний сервер. Вы должны привыкнуть к этому. –