2016-12-19 3 views
2

Как передать из этой коллекции документовMongoDB Извлечение Подмассивы из документов

/* 1 */ 
{ 
    "F" : [ 
     { 
      "n" : "test1", 
      "v" : "value1" 
     }, 
     { 
      "n" : "test2", 
      "v" : "value2" 
     } 
    ], 
    "POR" : [ 
     { 
      "n" : "1test1", 
      "v" : "1value1" 
     }, 
     { 
      "n" : "1test2", 
      "v" : "1value2" 
     }, 
     { 
      "n" : "1test3", 
      "v" : "1value3" 
     } 
    ] 
} 

/* 2 */ 
{ 
    "F" : [ 
     { 
      "n" : "2test1", 
      "v" : "2value1" 
     }, 
     { 
      "n" : "2test2", 
      "v" : "2value2" 
     } 
    ], 
    "POR" : [ 
     { 
      "n" : "2test1", 
      "v" : "2value1" 
     }, 
     { 
      "n" : "2test2", 
      "v" : "2value2" 
     } 
    ] 
} 

/* 3 */ 
{ 
    "F" : [ 
     { 
      "n" : "3test1", 
      "v" : "3value1" 
     }, 
     { 
      "n" : "3test2", 
      "v" : "3value2" 
     } 
    ], 
    "POR" : [ 
     { 
      "n" : "3test1", 
      "v" : "3value1" 
     } 
    ] 
} 

к этому:

{ 
    "ITEMS": [ 
     { "n": "2test1", "v": "2value1" }, 
     { "n": "2test2", "v": "2value2" }, 
     { "n": "1test1", "v": "1value1" }, 
     { "n": "1test2", "v": "1value2" }, 
     { "n": "1test3", "v": "1value3" }, 
     { "n": "3test1", "v": "3value1" } 
    ] 
} 

Я хочу, чтобы извлечь подмассив элементы из Serveral документов, и я не могу найти способ/метод.

Первый подход попробовал:

db.test.aggregate([ { $unwind : "$POR" } ]).pretty(); 
+0

Попробуйте что-то вроде этого 'db.test.aggregate ([{$ unwind:" $ POR "}, {$ group: { _id: null}, {ITEMS: {$ push: {" $ POR "}}}}])' – Veeram

+0

Используемый подход Seccond: db.test.aggregate ({$ unwind: "$ POR"}, {$ project: {_id: 0, 'POR': 1}}) – fgallego

+0

Являются ли элементы в поле «POR», отличные от коллекции? – styvane

ответ

1

Я думаю, что это делает то, что вам нужно:

> db.uwnd.aggregate([ 
    {$unwind:"$F"}, 
    {$unwind:"$POR"}, 
    {$group:{_id:null,items:{$addToSet:"$F",$addToSet:"$POR"}}} 
    ]).pretty() 

Учитывая данные выше этого будет возвращать следующий документ:

{ 
     "_id" : null, 
     "items" : [ 
       { 
         "n" : "1test3", 
         "v" : "1value3" 
       }, 
       { 
         "n" : "1test1", 
         "v" : "1value1" 
       }, 
       { 
         "n" : "1test2", 
         "v" : "1value2" 
       }, 
       { 
         "n" : "2test1", 
         "v" : "2value1" 
       }, 
       { 
         "n" : "2test2", 
         "v" : "2value2" 
       }, 
       { 
         "n" : "3test1", 
         "v" : "3value1" 
       } 
     ] 
} 

Так запрос разматывает оба массива, а затем группирует данные, добавляя записи в новый массив элементов из "F" и "POR" объектов

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