2017-02-01 2 views
0

У меня есть colleccion со списком строки:MongoDB - список строк в список объектов

{ 
"_id" : "87df7fd8f7df", 
"spaces" : [ 
    "45dfsdf5646sdf44fd", 
    "5d4fdf885sahg6f6fg" 
], 
} 

и я пытался заменить список объектов, как это:

{ 
"_id" : "ytry45rty4r4y", 
"spaces" : [ 
{ 
    "id" : "123", 
    "role" : "" 
}, 
{ 
    "id" : "321", 
    "role" : "" 
}, 
} 

Пожалуйста, помогите мне создать скрипт.

+0

Просьба представить более подробную информацию. Вы хотите просто слепо заменить? –

+0

Вы хотите использовать каждую строку в массиве как id и арендовать роль пустым? –

ответ

0

Самое простое, что вы можете сделать, это запустить что-то подобное в оболочке манго. вопрос не ясно, достаточно, чтобы понять, что отображение вы хотите сделать, но в общем коде будет выглядеть следующим образом:

db.testCollection.find().snapshot().forEach(function (elem) { 
 
\t if (!(elem && elem.spaces && elem.spaces.length && typeof elem.spaces[0] === 'string')) { 
 
\t \t print('Unable to update object: ' + elem._id.toString()); 
 

 
\t \t return; 
 
\t } 
 

 
\t var spaceObjects = elem.spaces.map(function (string) { 
 
\t \t return { 
 
\t \t \t id: string, 
 
\t \t \t role: '' 
 
\t \t }; 
 
\t }); 
 

 
\t db.testCollection.update({_id: elem._id}, 
 
\t \t { 
 
\t \t \t $set: {spaces: spaceObjects} 
 
\t \t } 
 
\t); 
 
});

+0

Он работал идеально. Спасибо Антонио! –

+0

Добро пожаловать :) –