He empezado a desarrollar una aplicación recientemente, y finalmente conseguí mi node.js servidor de comunicación con mi base de datos mongodb.

Quiero insertar un montón JSON objetos que se ven algo como esto:

   {
    'Username': 'Bob',
    'longitude': '58.3',
    'latitude': '0.3'
   }

Si este Objeto se inserta en myCollection, y entonces trato de insertar un objeto nuevo con el nombre de Bob, pero con diferentes coordenadas, quiero que la última ‘nombre de Usuario’: ‘Bob’ objeto para reemplazar la anterior. Sólo puede haber un objeto en myCollection con el ‘nombre de Usuario’: ‘Bob’, básicamente.

Si se trataba de una base de datos relacional haría Bob una clave principal o algo, pero me pregunto cuál es la mejor manera de hacer esto con mongoDb sería. Debo usar el update+upsert método? He intentado eso y no se parecía a la obra!

Disculpas si esto parece una pregunta tonta, pero soy nueva en todo esto.

OriginalEl autor DeaIss | 2014-04-03

1 Comentario

  1. 25

    Sí, un simple actualización consulta con el upsert opción debe satisfacer su caso de uso:

    db.collection.update(
       {username:"Bob"},
       {$set:{'longitude': '58.3', 'latitude': '0.3'}},
       { upsert: true}
    )

    Cuando se ejecute la consulta de primera vez (es decir, Bob no existe en la colección), se crea un nuevo documento. Pero cuando se ejecuta el segundo tiempo con los nuevos valores de lat/long, el documento existente se actualiza con los nuevos valores latitud/longitud.

    También puede crear un índice único en el username campo para evitar que varios registros para ‘Bob’ de ser creado, incluso accidentalmente:

    db.collection.ensureIndex( { "username": 1 }, { unique: true } )

    EDICIÓN:

    db.collection.ensureIndex() ahora es obsoleto y es un alias para db.collection.createIndex(). Así, el uso de db.de la colección.createIndex() para la creación de índices

    Gracias! ¿Qué pasa si en el $de campo que incluyó el ‘nombre de Usuario:Bob’, así como la longitud y la latitud? También, tiene el uso de garantizar índice de actualización tienen ningún beneficio? Gracias de nuevo!
    $set puede incluir 'username':'Bob'. Excepto para el _id campo, podemos modificar cualquier otro campo. _id campo es inmutable. Sí, la creación de un índice (aunque no único) ayuda en este caso, porque estamos consultando la colección de username. Si no hay ningún índice estuvieron presentes, sería una completa colección de escaneo. La creación de un índice que ayuda a encontrar el documento más rápido. Puede especificar el unique opción si ese es su requisito.
    Como una actualización de este, db.collection.ensureIndex() está ahora en desuso, y es un alias para db.collection.createIndex().
    estás en lo correcto. Gracias por tu comentario.
    Si tengo más de estos campos, es decir, campos que no son únicos, no se incluyen en la consulta, ni quiere cambiar, que quiero insertar si la consulta devuelve un valor nulo, pero desea mantener la misma a la hora de actualizar, ¿dónde puedo incluir? En $set?

    OriginalEl autor Anand Jayabalan

Dejar respuesta

Please enter your comment!
Please enter your name here