2012-04-08 25 views
11

¿Cómo se puede hacer esto con Mongo en una declaración [atómica]:MongoDB: insertar en la actualización de clave duplicada

insert mytable set MyUniqueKey = ?, X = ? on duplicate key update Y = ? 

Cuando se ejecuta esta declaración para la primera vez que va a establecer el valor de X pero después de eso sólo se actualizará Valor de Y

Solo MyUniqueKey es parte de una clave única y debe buscarse duplicados.

Respuesta

5

Hice esta pregunta en el grupo de usuarios de mongodb, la respuesta fue que no es posible y esta es una issue abierta.

+4

Este problema se ha cerrado en MongoDB 2.4 y ahora puede usar ['$ setOnInsert'] (http://docs.mongodb.org/manual/reference/operator/setOnInsert /). – str

14

Está buscando el upsert option en el comando Update. Los documentos deberían ser suficientes aquí.

+0

por favor da un ejemplo. Ya he intentado muchas combinaciones de opciones, pero no puedo seleccionar un campo para configurarlo, pero me excluiré de la actualización. –

+0

hay un campo que me gusta establecer solo en la primera inserción, pero que permanecen sin tocar en las actualizaciones. –

+0

Tiene que hacer que 'Y 'forme parte de la porción' query' de la actualización en lugar de parte de la porción 'update'. –

1

De

$setOnInsert

yo lo llamaría "MiColeccion" en lugar de "mitabla". Usted puede hacer lo siguiente:

db.mycollection.update(
    { MyUniqueKey: "?" }, 
    { 
     $set: {"y": "?"}, 
     $setOnInsert: { 
      MyUniqueKey: "?", 
      "x": "?", 
    }, 
    { upsert: true } 
) 

Básicamente, el conjunto $ corre siempre, excepto cuando no existe documento. Entonces se ejecutará $ setOnInsert.

Cuestiones relacionadas