sql >> Base de Datos >  >> NoSQL >> MongoDB

Objeto de actualización de MongoDb en una matriz en la primera aparición desde la última

Entiendo lo que está diciendo en el sentido de que desea hacer coincidir el último elemento en este caso o, de hecho, procesar la coincidencia en orden inverso. No hay forma de modificar esto y el índice almacenado en el posicional $ el operador siempre será la "primera" coincidencia.

Pero puede cambiar su enfoque a esto, ya que el comportamiento predeterminado de $push es "agregar" al final de la matriz. Pero MongoDB 2.6 introdujo un $position modificador para que, de hecho, siempre pueda "preagregar" a la matriz, lo que significa que su elemento "más antiguo" está al final.

Toma esto por ejemplo:

db.artest.update(
   { "array": { "$in": [5] } },
   { "$push": { "array": { "$each": [5], "$position": 0 } }},
   { "upsert": true }
)

db.artest.update(
    { "array": { "$in": [5] } },
    { "$push": { "array": { "$each": [6], "$position": 0 } }},
    { "upsert": true }
)

Esto da como resultado un documento que es el "reverso" del $push normal comportamiento:

{ "_id" : ObjectId("53eaf4517d0dc314962c93f4"), "array" : [ 6, 5 ] }

Alternativamente, podría aplicar el $sort modificador al actualizar sus documentos para "ordenar" los elementos para que se inviertan. Pero esa puede no ser la mejor opción si se almacenan valores duplicados.

Por lo tanto, considere almacenar sus matrices en "reversa" si tiene la intención de hacer coincidir los elementos "más nuevos" "primero". Actualmente, esa es su única forma de obtener su comportamiento de "coincidencia desde el último".