2012-04-08 13 views
11

Come si può fare questo con Mongo in una [atomica] dichiarazione:MongoDB: inserire aggiornata chiave duplicata

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

Quando questa istruzione viene eseguita per la prima volta sarà impostare il valore di X, ma dopo che si aggiornerà solo Valore Y

Solo MyUniqueKey è parte della chiave univoca e deve essere cercata per i duplicati.

risposta

5

Ho posto questa domanda al gruppo di utenti di mongodb, la risposta è stata che non è possibile e questo è un issue aperto.

+4

Questo problema è stato chiuso in MongoDB 2.4 e ora puoi usare ['$ setOnInsert'] (http://docs.mongodb.org/manual/reference/operator/setOnInsert /). – str

14

Si sta cercando il upsert option sul comando Update. I documenti dovrebbero essere sufficienti qui.

+0

ti preghiamo di dare un esempio. Ho già provato molte combinazioni di opzioni, ma non posso selezionare un campo da impostare su insert ma essere escluso all'aggiornamento. –

+0

c'è un campo che mi piace essere impostato solo sul primo inserto, ma rimango non toccato sugli aggiornamenti. –

+0

Devi fare una parte 'Y' della parte' query' dell'aggiornamento invece della parte 'update'. –

1

Da

$setOnInsert

Io lo chiamerei "MyCollection" invece di "MyTable". È possibile effettuare le seguenti operazioni:

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

Fondamentalmente il $ set corre sempre, tranne quando il documento non esiste. Quindi verrà eseguito $ setOnInsert.

Problemi correlati