sql >> データベース >  >> NoSQL >> MongoDB

存在しないドキュメントのみをインポートするにはどうすればよいですか?

    mongoimportのデフォルトの動作は、既存のドキュメントを上書きすることではありません。JSシェルで、コレクション「testimport」にドキュメントを作成しました

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

    import.jsonファイルの内容は次のとおりです。これには2つのドキュメントが含まれています。1つは一意の_idを持ち、もう1つは重複した_idを持ちます。

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

    新しいターミナルウィンドウで、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
    $
    

    mongoimportの出力には、2つのオブジェクトがインポートされたことが示されていますが、_id:1のドキュメントは上書きされていません。

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

    --upsertフラグを使用すると、_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
    $
    

    JSシェルでは、_id:1のドキュメントが更新されていることがわかります:

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

    これはあなたが経験している行動ではありませんか?上記はバージョン2.1.1-preでテストされましたが、mongoimportコードがしばらく変更されたとは思いません。




    1. Mongodb node.js $ outは、toArray()を呼び出した場合にのみ集計が機能します

    2. マングースの個体数と骨材

    3. MongoDBのGroupBy複数の列

    4. PHPMongoDB-カーソルオプションなしでのaggregateコマンドの使用は非推奨になりました。何?