sql >> Base de Datos >  >> NoSQL >> MongoDB

¿Cómo importar solo documentos no existentes?

El comportamiento predeterminado de mongoimport no debería ser sobrescribir documentos existentes:en el shell JS, creé un documento en la colección "testimport"

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

Estos son los contenidos del archivo import.json. Contiene 2 documentos, uno con un _id único y otro con un _id duplicado.

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

En una nueva ventana de terminal, se ejecuta 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
$

Aunque la salida de mongoimport dice que se importaron dos objetos, el documento con _id:1 no se sobrescribió.

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

Si se usa el indicador --upsert, se actualizará el documento con _id:1:

$ ./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
$

En el shell JS, podemos ver que el documento con _id:1 ha sido actualizado:

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

¿No es este el comportamiento que estás experimentando? Lo anterior se probó con la versión 2.1.1-pre, pero no creo que el código de mongoimport haya cambiado por un tiempo.