У меня есть некоторые данные, которые выглядят так (не реальные данные):.
{
_id:'cust04',
name:'Diarmuid Rellis',
address:'Elysium, Passage East',
county:'Waterford',
phone:'051-345786',
email:'[email protected]',
quotations:[
{
_id:'quot03',
supplier_ref:'A2006',
date_received: new Date('2013-05-12T00:00:00'),
date_returned: new Date('2013-05-15T00:00:00'),
supplier_price:35000.00,
customer_price:35000.00,
orders:[
{
_id:'ord03',
order_date: new Date('2013-05-20T00:00:00'),
del_date: new Date('2013-08-12T00:00:00'),
del_address:'Elysium, Passage East, Co. Waterford',
status:'BALPAID'
}
]
},
{
_id:'quot04',
supplier_ref:'A2007',
date_received: new Date('2013-08-10T00:00:00'),
date_returned: new Date('2013-08-12T00:00:00'),
supplier_price:29600.00,
customer_price:29600.00,
orders:[
{
_id:'ord04',
order_date: new Date('2014-03-20T00:00:00'),
del_date: new Date('2014-05-12T00:00:00'),
del_address:'Elysium, Passage East, Co. Waterford',
status:'INPROD'
}
]
}
]
}
Я пытаюсь раскрутить предложения и заказы массивов, а также получить проекцию всех заказов в производство, которое включает имя клиента, supplier_ref и дату заказа для каждого.
Вот мой запрос:
db.customers.aggregate([
{ $unwind: "$quotations" },
{ $unwind: "$quotations.orders" },
{ $match: { 'quotations.orders.status': 'INPROD' } },
{
$project: {
name: 1,
supplier_ref: "$quotations.supplier_ref",
order_id: "$quotations.orders._id",
order_date: "$quotations.orders.order_date"
}
},
{
$group: {
_id: "$order_id"
}
}
], function (err, results) {
console.log(results);
})
Запрос выполняется успешно, но только дает идентификаторы порядка, а не каких-либо других полей, необходимых. Что мне не хватает?
EDIT
Я надеюсь на результат, как:
"result": [
{
"_id" : "orderid01",
"name" : "Joe Bloggs",
"supplier_ref" : "A1234",
"date_ordered" : "2012-04-14"
},
{
"_id" : "orderid02",
"name" : "Joe Bloggs",
"supplier_ref" : "A1235",
"date_ordered" : "2012-04-16"
}
]
Когда я добавить дополнительное поле в моей функции 'группы', например, так:
$group: {
_id: "$order_id",
supplier_ref: "$supplier_ref"
}
I получить ошибку: «поле агрегата группы« поставщик_реф »должно быть определено как выражение внутри объекта». Должен ли я связать его с объектом результата каким-то образом?
Что ** точно ** вы ожидали возвращения (возможно, отредактируйте на свой вопрос). Но когда «группировка» на 'order_id' на этом уровне, это не будет, возможно, вернуть много другого. То же самое относится к другим хранилищам данных. –
, если вы хотите увидеть дополнительные поля, добавьте эти поля в свой раздел $ group, как упоминал Нил – anvarik
Отредактировано для большей ясности в моей проблеме, спасибо за ввод –