sql >> Database >  >> NoSQL >> MongoDB

Hoe importeer ik alleen niet bestaande documenten?

Het standaardgedrag van mongoimport zou niet moeten zijn om bestaande documenten te overschrijven:in de JS-shell heb ik een document gemaakt in de verzameling "testimport"

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

Hier is de inhoud van het bestand import.json. Het bevat 2 documenten, een met een unieke _id en een met een dubbele _id.

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

In een nieuw terminalvenster wordt mongoimport uitgevoerd:

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

Hoewel de uitvoer van mongoimport zegt dat er twee objecten zijn geïmporteerd, is het document met _id:1 niet overschreven.

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

Als de vlag --upsert wordt gebruikt, wordt het document met _id:1 bijgewerkt:

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

In de JS-shell kunnen we zien dat het document met _id:1 is bijgewerkt:

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

Is dit niet het gedrag dat je ervaart? Het bovenstaande is getest met versie 2.1.1-pre, maar ik geloof niet dat de mongoimport-code al een tijdje is gewijzigd.




  1. Denormalisatie van gegevens in MongoDB

  2. django-nonrel sluit lijstveld uit van admin

  3. MongoDb-aggregatie voor filterlijst op basis van id's die aanwezig zijn in object van array uit alle documenten van dezelfde verzameling

  4. MongoDB kaart/verminderen over meerdere collecties?