MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Come importare solo documenti non esistenti?

Il comportamento predefinito di mongoimport non dovrebbe essere quello di sovrascrivere documenti esistenti:nella shell JS, ho creato un documento nella raccolta "testimport"

> db.testimport.save({_id:1, x:"a"})
> db.testimport.find()
{ "_id" : 1, "x" : "a" }
> 

Ecco il contenuto del file import.json. Contiene 2 documenti, uno con un _id univoco e uno con un _id duplicato.

import.json
{_id:1, x:"b"}
{_id:2, x:"b"}

In una nuova finestra del terminale, viene eseguito mongoimport:

$ ./mongoimport -d test -c testimport import.json -vvvvv 
Wed Apr  4 19:03:48 creating new connection to:127.0.0.1
Wed Apr  4 19:03:48 BackgroundJob starting: ConnectBG
Wed Apr  4 19:03:48 connected connection!
connected to: 127.0.0.1
Wed Apr  4 19:03:48 ns: test.testimport
Wed Apr  4 19:03:48 filesize: 29
Wed Apr  4 19:03:48 got line:{_id:1, x:"b"}
Wed Apr  4 19:03:48 got line:{_id:2, x:"b"}
imported 2 objects
$

Anche se l'output di mongoimport dice che sono stati importati due oggetti, il documento con _id:1 non è stato sovrascritto.

> db.testimport.find()
{ "_id" : 1, "x" : "a" }
{ "_id" : 2, "x" : "b" }
>

Se viene utilizzato il flag --upsert, il documento con _id:1 verrà aggiornato:

$ ./mongoimport -d test -c testimport import.json -vvvvv --upsert
Wed Apr  4 19:14:26 creating new connection to:127.0.0.1
Wed Apr  4 19:14:26 BackgroundJob starting: ConnectBG
Wed Apr  4 19:14:26 connected connection!
connected to: 127.0.0.1
Wed Apr  4 19:14:26 ns: test.testimport
Wed Apr  4 19:14:26 filesize: 29
Wed Apr  4 19:14:26 got line:{_id:1, x:"b"}
Wed Apr  4 19:14:26 got line:{_id:2, x:"b"}
imported 2 objects
$

Nella shell JS, possiamo vedere che il documento con _id:1 è stato aggiornato:

> db.testimport.find()
{ "_id" : 1, "x" : "b" }
{ "_id" : 2, "x" : "b" }
>

Non è questo il comportamento che stai vivendo? Quanto sopra è stato testato con la versione 2.1.1-pre, ma non credo che il codice mongoimport sia cambiato da un po'.