update query print example javascript mongodb mongo-shell

javascript - query - Actualización en forEach en mongodb shell



mongodb iterate cursor (2)

Tengo una colección de tablas con 2 registros:

{ "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 ] } ] }

Quiero actualizar los campos aTable.fields.items desde

items" : [ 11,12 ]

a

items" : [ {item: 11, key: 0}, {item:12, key: 0} ]

Busco campos con forEach pero no puedo guardarlo.

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}) } ) } ) });

Por favor, ayúdame. Muchas gracias


Para conseguir lo que deseas necesitarás algunas cosas:

t.forEach(function( aRow ) { var newFields = []; aRow.fields.forEach( function( aField ){ var newItems = []; aField.items.forEach( function( item ){ var aNewItem = { item: parseInt(item), ref: 0 }; newItems.push( aNewItem ); } ); newFields.push({ _id: aField._id, items: newItems }); } ) aTable.update( { _id: aRow._id }, { "$set": { "fields": newFields } } ); });

Así que básicamente necesitas "reconstruir" tus arreglos antes de actualizar


Puede realizar cambios directamente en todo el objeto y luego guardarlo. Prueba el siguiente fragmento

db.aTable.find().forEach(function (itemWrapper){ itemWrapper.fields.forEach(function(field){ var items = field.items; var newItems = []; items.forEach(function(item){ var t = {''item'':item,''key'':0} newItems.push(t); }) field.items = newItems; }) db.aTable.save(itemWrapper) })

Lo que estoy haciendo es iterar sobre todos los elementos y hacer una nueva matriz con {item : 1 , key:0} y luego volver a establecerla en la matriz de elementos en el objeto de campo.

Esta es la salida después de la actualización:

{ "_id" : ObjectId("5332a192ece4ce8362c7a553"), "title" : "record 1", "fields" : [ { "_id" : 1, "items" : [ { "item" : 1, "key" : 0 } ] }, { "_id" : 2, "items" : [ { "item" : 2, "key" : 0 }, { "item" : 3, "key" : 0 }, { "item" : 4, "key" : 0 } ] }, { "_id" : 3, "items" : [ { "item" : 5, "key" : 0 } ] } ] } /* 1 */ { "_id" : ObjectId("5332a192ece4ce8362c7a554"), "title" : "record 2", "fields" : [ { "_id" : 4, "items" : [ { "item" : 7, "key" : 0 }, { "item" : 8, "key" : 0 }, { "item" : 9, "key" : 0 }, { "item" : 10, "key" : 0 } ] }, { "_id" : 5, "items" : [] }, { "_id" : 6, "items" : [ { "item" : 11, "key" : 0 }, { "item" : 12, "key" : 0 } ] } ] }