2013-12-20 2 views
1

Я создал совокупный запрос, который использует ключ «parts» как «_id» и возвращает все числа «подчасти», связанные в массиве. Результат из агрегированного запроса нежелателен, так как я получаю результат массива, который содержит 74755 словарных объектов. Каждый объект содержит int 32 для _id и массив для '#associated_subparts'. Я могу получить доступ к подэлементам через:Доступ к массиву, вложенному в словарь в объекте массива

db.agg_result.find({}, {_id: 0, result: { $slice: [0,2]}})  

но это всего лишь позиционный метод. Я пробовал варианты вложенных $ elemMatch и $ всех запросов без успеха. Например, я хочу вернуть объект с id 468183339. Возможно, я неправильно проецировал свой исходный сводный запрос, но я бы хотел вернуть коллекцию без гнезда, поэтому каждый объект в коллекции является одной из этих частей> объектов подчастей.

Пример запроса:

var agg_out = db.collection.aggregate({ $group :{ '_id' : "$parts#", 
    'associated_subparts#' : { $addToSet : "$sub_part" }}}); 
db.agg_result.insert(agg_out); 
db.agg_result.find(); 

Результат:

{ 
    "_id" : ObjectId("52b4c4c6e984c01d69ff176f"), 
    "result" : [ 
     { 
      "_id" : 468183339, 
      "associated_subparts#" : [ 
       -1408237536 
      ] 
     }, 
     { 
      "_id" : 782155933, 
      "associated_subparts#" : [ 
       -1408237536 
      ] 
     }, 
     { 
      "_id" : 1583659973, 
      "associated_subparts#" : [ 
       -1408237535, 
       -1408237535, 
       -1408237535, 
       -1408237535, 
       -1408237535, 
       -1408237535, 
       -1408237535, 
       -1408237535, 
       -1408237535, 
       -1408237535, 
       -1408237535, 
       -1408237535 
      ] 
     } 
] 
} 

ответ

1

Если я правильно понимаю вашу проблему правильно на этот раз, правильный способ, чтобы заполнить свою коллекцию agg_result бы перебрать результат поля ваш итоговый документ запроса агрегирования перед вставкой каждого подтипа индекса результата в вашу коллекцию agg_result, например:

agg_out.result.forEach(function(x){db.agg_result.insert(x);}); 
+0

Привет, Calimero, может быть, я не был ясен, я хочу поддерживать отношения друг к другу. Чтобы я мог видеть все подчасти, связанные с уникальными частями. Например, автомобиль A будет иметь колеса X, шины Y и т. Д. Разморозка доставит мне автомобиль A - Wheels X, а затем еще одну запись Car A - Tyres Y. – KLDavenport

+0

Спасибо за разъяснение и извините за непонимание - просто понял, что вы сделали полную противоположность с вашим текущим запросом агрегирования, и вы отправили полученную коллекцию. Надеюсь, мое следующее обновление будет более полезным! – Calimero

+0

Ах спасибо за то, что я перечитал, я просто изменил «примерные данные» на «примерный результат», который был запутан. – KLDavenport

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