MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Jak zaimportować tylko nieistniejące dokumenty?

Domyślnym zachowaniem mongoimport nie powinno być nadpisywanie istniejących dokumentów:W powłoce JS utworzyłem dokument w kolekcji "testimport"

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

Oto zawartość pliku import.json. Zawiera 2 dokumenty, jeden z unikalnym identyfikatorem _id, a drugi z duplikatem identyfikatora _id.

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

W nowym oknie terminala uruchamiany jest import mongo:

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

Mimo że dane wyjściowe mongoimport mówią, że zaimportowano dwa obiekty, dokument z _id:1 nie został nadpisany.

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

Jeśli użyto flagi --upsert, dokument z _id:1 zostanie zaktualizowany:

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

W powłoce JS widzimy, że dokument z _id:1 został zaktualizowany:

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

Czy nie jest to zachowanie, którego doświadczasz? Powyższe zostało przetestowane z wersją 2.1.1-pre, ale nie wierzę, że kod mongoimport zmienił się od jakiegoś czasu.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. $push i $set w tej samej aktualizacji MongoDB

  2. Seryjne iterowanie po kursorze mongodb (oczekiwanie na wywołania zwrotne przed przejściem do następnego dokumentu)

  3. Projektuj pierwszy element w tablicy do nowego pola (agregacja MongoDB)

  4. Zapytanie w funkcji redukcji mapy MongoDB

  5. Korzystanie z agregacji wielokrotnej z MongoDB