2016-03-07 20 views
17

MongoDB operazioni di massa hanno due opzioni:Qual è la differenza tra replaceOne() e updateOne() in MongoDB?

  1. Bulk.find.updateOne()

    aggiunge un singolo documento operazione di aggiornamento ad una lista operazioni bulk. L'operazione può sostituire un documento esistente o aggiornare campi specifici in un documento esistente.

  2. Bulk.find.replaceOne()

    aggiunge un singolo documento operazione di sostituzione di un elenco operazioni bulk. Utilizzare il metodo Bulk.find() per specificare la condizione che determina il documento da sostituire. Il metodo Bulk.find.replaceOne() limita la sostituzione a un singolo documento.

Secondo la documentazione, entrambi questi due metodi possono sostituire un documento corrispondente. Ho capito correttamente, che updateOne() è un metodo più generico, che può sostituire il documento esattamente come fa replaceOne() o semplicemente aggiornare i suoi campi specifici?

risposta

19

Con replaceOne() è possibile solo sostituire l'intero documento, tuttavia updateOne() consente di aggiornare i campi che sono stati annotati nella domanda.

Ma questo significa anche è possibile utilizzare gli operatori di aggiornamento:

https://docs.mongodb.org/manual/reference/operator/update/

E IIRC è possibile modificare lo schema utilizzando updateOne() che non si può fare con replaceOne()

+2

che cosa si intende con "cambiare il schema"? – caub

+2

sostituisce sostituisce un documento con uno nuovo, utilizzando gli stessi parametri. con l'aggiornamento è possibile aggiungere/rimuovere i parametri che compongono il documento. – Hughzi

+3

ah ok, quindi sostituire sempre cambia '_id' – caub