2016-04-25 4 views
0

У меня есть массив, содержащий поддокумент. Мне нужно взять поля внутри этого поддокумента за пределами поддокумента. Документ выглядит примерно так.Перемещение поля внутри массива

field1: "abc" 
field2: "dsf" 
field3: { 

    allowed-type: [ 
       field4: "32" 
} 

Мне нужно взять поле 4 за пределами разрешенного массива и поместить его под поле3. Я попытался следующие

db.collection.find({}).forEach(function (doc) { 
    doc.field3.field4 = 'doc.field3.allowed-type.field4'; 
db.collection.save(doc); }); 

Проблема заключается в том, что массив позволил типа содержит дефис, так что я не могу относиться к нему без использования двойных кавычек. Но когда я использую двойные кавычки, поле4 будет назначаться «doc.field3.allowed-type.field4» как строка, а не принимать значение из doc.field3.allowed-type.field4.

+0

как насчет '= doc.field3 ['allowed-type']. Field4'? –

ответ

0

Агрегация - это ваше решение. Сначала вам нужно будет раскрутить документ, это в основном сгладит документ и выведет «32» из массива. Затем вам нужно будет вернуть возвращаемый результат и вывести значение «field4» в новое поле, которое является документом в поле «3». pretty() предназначен только для представления результата в читаемом формате.

db.fields.aggregate(
    {$unwind:"$field3.allowed-type.field4"}, 
    {$project: 
     {field1:1, 
     field2:1, 
     field3: 
      {field4: "$field3.allowed-type.field4" 
}} }).pretty(); 
Смежные вопросы