2014-03-26 3 views
0

У меня есть некоторые данные, которые выглядят так (не реальные данные):.

{ 
     _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 получить ошибку: «поле агрегата группы« поставщик_реф »должно быть определено как выражение внутри объекта». Должен ли я связать его с объектом результата каким-то образом?

+2

Что ** точно ** вы ожидали возвращения (возможно, отредактируйте на свой вопрос). Но когда «группировка» на 'order_id' на этом уровне, это не будет, возможно, вернуть много другого. То же самое относится к другим хранилищам данных. –

+0

, если вы хотите увидеть дополнительные поля, добавьте эти поля в свой раздел $ group, как упоминал Нил – anvarik

+0

Отредактировано для большей ясности в моей проблеме, спасибо за ввод –

ответ

1

Извлечение групповой функции в целом дало результаты, которые я хотел.

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