sql >> Databasteknik >  >> NoSQL >> MongoDB

Hur importerar man endast icke-existerande dokument?

Standardbeteendet för mongoimport bör inte vara att skriva över befintliga dokument:I JS-skalet skapade jag ett dokument i samlingen "testimport"

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

Här är innehållet i filen import.json. Den innehåller 2 dokument, ett med ett unikt _id och ett med ett duplicate _id.

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

I ett nytt terminalfönster körs 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
$

Även om utdata från mongoimport säger att två objekt importerades, har dokumentet med _id:1 inte skrivits över.

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

Om flaggan --upsert används kommer dokumentet med _id:1 att uppdateras:

$ ./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-skalet kan vi se att dokumentet med _id:1 har uppdaterats:

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

Är det inte det här beteendet du upplever? Ovanstående testades med version 2.1.1-pre, men jag tror inte att mongoimport-koden har ändrats på ett tag.




  1. MongoError:ns hittas inte när du försöker avbryta samlingen

  2. UnhandledPromiseRejectionWarning:MongooseServerSelectionError

  3. Anslutning nekad av Docker-container

  4. Distribuera molndatabaser med ClusterControl 1.6