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

MongoDBの「$pullAllには配列引数が必要ですが、doubleが指定されていました」を修正しました

    $pullAllには配列引数が必要ですが、doubleが与えられた 」MongoDBのエラー。これは、置き換える値として配列を指定しなかったためです。

    次のドキュメントを含むコレクションがあるとします。

    { "_id" : 1, "bar" : [ 1, 7, 2, 3, 8, 7, 1 ] }
    { "_id" : 2, "bar" : [ 0, 1, 8, 17, 18, 8 ] }
    { "_id" : 3, "bar" : [ 15, 11, 8, 0, 1, 3 ] }

    そして、$pullAllを使用します これらのドキュメントのいずれかで出現するすべての値を置き換えます。

    問題コード

    上記のエラーの原因となるコードの例を次に示します。

    db.foo.update( 
      { _id: 1 }, 
      { $pullAll: { bar: 7 } } 
    )

    結果:

    WriteResult({
    	"nMatched" : 0,
    	"nUpserted" : 0,
    	"nModified" : 0,
    	"writeError" : {
    		"code" : 2,
    		"errmsg" : "$pullAll requires an array argument but was given a double"
    	}
    })

    これは、値7を囲むのを忘れたために発生しました 角かっこ付き。つまり、配列を提供するのを忘れていました。

    ソリューション

    今回は配列として値を提供したことを除いて、同じコードを次に示します。

    db.foo.update( 
      { _id: 1 }, 
      { $pullAll: { bar: [ 7 ] } } 
    )

    結果:

    WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

    これは、1つのドキュメントが一致して変更されたことを示しています。

    今すぐコレクションを見てみましょう:

    db.foo.find()

    結果:

    { "_id" : 1, "bar" : [ 1, 2, 3, 8, 1 ] }
    { "_id" : 2, "bar" : [ 0, 1, 8, 17, 18, 8 ] }
    { "_id" : 3, "bar" : [ 15, 11, 8, 0, 1, 3 ] }

    ドキュメントは正常に更新されました。


    1. 依存関係を解決しようとしています:.NET標準ライブラリをNETCoreに変更する-Microsoft.Extensions.Primitives

    2. redisを使用して辞書を保存および取得する方法

    3. 高可用性オープンソースデータベース環境を設計する方法

    4. mongoでトランザクションのロールバックを実現するにはどうすればよいですか?