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

mongodbの更新が一致したドキュメントが失敗する

    これは失敗ではなく、仕様によるものです。

    Bulk OperationsAPI の下 、ドキュメントの既存の値と一致する更新する値を指定した場合、その値は変更済みとしてマークされず、実際にはドキュメントの再書き込みを試みません。

    簡単なテスト:

    db.junk.insert({ "a": 1 })
    WriteResult({ "nInserted" : 1 })
    
    db.junk.update({ "a": 1},{ "$set": { "a": 2 }})
    WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
    
    db.junk.update({ "a": 2 },{ "$set": { "a": 2 }})
    WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 0 })
    
    db.junk.update({ "a": 2 },{ "$set": { "a": NumberInt(2) }})
    WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
    
    db.junk.update({ },{ "$set": { "a": NumberInt(2) }})
    WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 0 })
    

    バージョン2.6以降のMongoDBシェルのすべての操作は、実際には Bulk OperationsAPI<を使用しています。 / a> 。ここに、 WriteResultが表示されます。 これは、これが起こっている証拠としてそのAPIから来ています。

    したがって、ここでの短いケースは、変更する正しいタイプの「手動で挿入された」アイテムがある場合、それらは変更されないということです。




    1. mongoDBでOHLCを集約しながら時間のギャップを回避する方法

    2. Dockermongodbがmacosxとボリュームを共有します

    3. Elastic Beanstalkにmongodbをインストールするにはどうすればいいですか?

    4. エラー:スクレイピング時にETIMEDOUTを接続します