with query nodejs node findone example consulta javascript mongodb nosql

javascript - query - ¿Cómo agrego un valor a la parte superior de una matriz en mongodb?



node js mongodb example (2)

"unshift" inserta datos en la parte frontal de una matriz ... mientras que "push" la inserta al final. por ejemplo, en JavaScript:

> a = [''red'',''green'',''blue''] [ "red", "green", "blue" ] > a.unshift("yellow") 4 > a [ "yellow", "red", "green", "blue" ]

Pero desafortunadamente esto no es compatible con la API de Mongo como una operación atómica:

http://www.mongodb.org/display/DOCS/Updating

solo admite "push"

¿Qué tan grande es tu matriz?

podrías asumir que tu matriz en Mongo siempre está almacenada en reversa, y usar push, o puedes leer la matriz, modificarla con unshift, y luego almacenarla nuevamente (lo cual no sería atómico)

¿Cómo agrego un valor a la parte superior de una matriz en mongodb?

di que tengo este documento en mi colección mongo:

{ "colors" : [ "red", "green", "blue" ] }

¿Cómo agrego "amarillo" al frente de la lista?

Cuando lo hago:

{$push:{colors:"yellow"}}

Me gustaría obtener esto:

{ "colors" : [ "red", "green", "blue", "yellow" ] }

quiero esto:

{ "colors" : [ "yellow", "red", "green", "blue"] }

¡gracias por adelantado!


Para cualquier persona nueva en esto, MongoDB 2.6+ es compatible con el operador $position , que se puede usar para lograr el efecto deseado. El beneficio aquí es que no necesita devolver todo el conjunto de documentos, actualizarlo localmente y guardarlo: el operador $position significa que las cosas se pueden hacer atómicamente.

Debe usarlo junto con $each :

$push: { colors: { $each: [''yellow''], $position: 0 } }