I have got a collection aTable with 2 records:
{
"title" : "record 1",
"fields" : [
{
"_id" : 1,
"items" : [
1
]
},
{
"_id" : 2,
"items" : [
2,3,4
]
},
{
"_id" : 3,
"items" : [
5
]
}
]
},
{
"title" : "record 2",
"fields" : [
{
"_id" : 4,
"items" : [
7,8,9,10
]
},
{
"_id" : 5,
"items" : [
]
},
{
"_id" : 6,
"items" : [
11,12
]
}
]
}
i want to update fields aTable.fields.items from
items" : [ 11,12 ]
to
items" : [
{item: 11, key: 0},
{item:12, key: 0}
]
i browse fields with forEach but i can't save it.
var t = db.aTable.find();
t.forEach(function( aRow ) {
aRow.fields.forEach( function( aField ){
aField.items.forEach( function( item ){
var aNewItem = { item: parseInt(item), ref: 0 };
db.aTable.update(item, {$set:aNewItem})
} )
} )
});
Please help me. Thank you alot
To get what you want you will need a few things:
So basically you need to "re-construct" your arrays before updating
You can make changes directly in the whole object and then save it. Try the following snippet
What I am doing is iterating over all items and making a new array with
{item : 1 , key:0}
and then setting it back to items array in field object.This is the output after update :