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

Hvordan importerer man kun ikke-eksisterende dokumenter?

Standardadfærden for mongoimport bør ikke være at overskrive eksisterende dokumenter:I JS-shellen oprettede jeg et dokument i samlingen "testimport"

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

Her er indholdet af filen import.json. Den indeholder 2 dokumenter, et med et unikt _id og et med et dublet _id.

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

I et nyt terminalvindue køres 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
$

Selvom outputtet fra mongoimport siger, at to objekter blev importeret, er dokumentet med _id:1 ikke blevet overskrevet.

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

Hvis --upsert flaget bruges, så vil dokumentet med _id:1 blive opdateret:

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

I JS-skallen kan vi se, at dokumentet med _id:1 er blevet opdateret:

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

Er det ikke den adfærd, du oplever? Ovenstående blev testet med version 2.1.1-pre, men jeg tror ikke, at mongoimport-koden har ændret sig i et stykke tid.




  1. replika Sæt mongo docker-compose

  2. Søger efter lokationer med Google Maps API til Android

  3. bruger streng til mongodb _id

  4. Express JS Vis data efter ID