2012-11-03 8 views
5

In quanto tempo il comando upsert sarà implementato in Meteor?Meteor upter equivalente

E qual è il modo migliore per fare la stessa cosa nel frattempo?

Qualcosa di simile è quello che sto facendo in questo momento:

if typeof (item = Items.findOne({title:'Foo'})) == 'undefined' 
    item = Items.insert({title:'Foo'}) 
else 
    Items.update(item._id, {$set: {title:'Foo'}}) 
# do something with item 
+2

con la soluzione, notare che se due client separati eseguire il findOne(), allo stesso tempo, poi due documenti con '{title: 'Foo'}' volontà essere creato. –

+0

Vero, quindi l'implementazione di un meteorite di upsert sarebbe l'ideale. Poiché se due client eseguono upsert con gli stessi dati, creano singoli documenti sul db simulato del loro cliente; quindi meteor sincronizza i due documenti quando vengono eseguiti sul server. Potrebbe diventare un po 'peloso, però ... Capisco perché non è ancora implementato. – tom

risposta

5

Dopo quanto tempo il comando upsert essere implementata in Meteor?

UPDATE: @Thomas4019 ricorda che upsert è ora supportata:

v0.6.6

"Aggiungi upsert supporto Collection.update ora supporta il {upsert: true}.. Inoltre opzione, aggiungere un Metodo Collection.upsert che restituisce l'ID oggetto appena inserito, se applicabile. "

Fonte: History.md

documentazione Uso: http://docs.meteor.com/#upsert

- risposta iniziale segue -

C'è una carta sul Trello Meteor tabella di marcia che si può votare per indicare la sua importanza per te : https://trello.com/c/C91INHmj

E 'attualmente nella lista "Più tardi" il che significa che ci vorrà un po' prima che venga implementato a meno che non riceva molti voti.

L'altra cosa importante da notare è che poiché meteor è open-source, è possibile implementare le modifiche necessarie da soli e inviare di nuovo.


Qual è il modo migliore per fare la stessa cosa nel frattempo?

Esistono diverse soluzioni, ma che è più appropriato per l'uso: il caso è impossibile da dire senza una maggiore conoscenza del progetto.

  1. utilizzare il Codice come è, aggiungere un indice unico per la raccolta, e gestire l'errore di chiave duplicata se/quando sorge

  2. modifica di progettazione per implementare esplicitamente concorrenza ottimistica.

Il nucleo di entrambe queste soluzioni è lo stesso, gestisce con grazia il caso di errore. Il primo è più semplice da implementare. # 2 consente una maggiore flessibilità nel modo in cui viene gestita la concorrenza ottimistica.

+1

La funzionalità Upsert è ora integrata. – Thomas4019

0

Se si desidera veramente farlo, è possibile utilizzare direttamente la connessione mongodb: MongoInternals.defaultRemoteCollectionDriver().mongo.db.collection('myCollection').update(query, update, {upsert: true}). Ovviamente questa connessione non è documentata quindi c'è la possibilità che possa essere modificata in futuro.

0

Upsert è davvero facile con questo trucco.basta verificare se ha una proprietà _id:

if(item._id){ 
    //update 
}else{ 
    //insert 
}