どうやって配列中の入れ子のオブジェクトを更新しますか?
2050 ワード
前言
周知のように、mongodbはjsonのようなデータ形式でbsonにデータを格納しています.データ間に入れ子ができるので、入れ子の比較的深いフィールドを探したり、修正したりすることが問題になります.そのようなコレクションがあるとします.
問題
さて、問題が来ました.もしある日私たちがJavaScriptに関する文章を新たに追加したら、JavaScriptに対応するnumberを追加します.これはどうやって操作すればいいですか?この時は$操作符を使う必要があります.完全なudate文は以下の通りです.
周知のように、mongodbはjsonのようなデータ形式でbsonにデータを格納しています.データ間に入れ子ができるので、入れ子の比較的深いフィールドを探したり、修正したりすることが問題になります.そのようなコレクションがあるとします.
{
"_id" : ObjectId("5a3672b2c0e07c5f2ab47f06"),
"type" : [
{
"name" : "JavaScript",
"number" : 2
},
{
"name" : "node.js",
"number" : 1
}
]
}
そのtypeフィールドは配列で、配列の要素はいくつかのnameフィールドとnumberフィールドを持つオブジェクトです.この集合の記録は、あるブログや似たようなシステム文章の種類と数量であることが分かります.似たような構造は非常に一般的です.問題
さて、問題が来ました.もしある日私たちがJavaScriptに関する文章を新たに追加したら、JavaScriptに対応するnumberを追加します.これはどうやって操作すればいいですか?この時は$操作符を使う必要があります.完全なudate文は以下の通りです.
db.collectionName.update({"type.name":"JavaScript"},{$inc:{"type.$.number":1}})
ここでは、以下の点に注意したい.1.{"type.name":"JavaScript"}
は、typeの中からJavaScriptであるnameを見つけるためのオブジェクト2.$inc
は、文書のある値をデジタル型のキーに増減するための操作3."type.$.number"
中"$"
オペレータは、照会結果の配列の内容をクエリードキュメントに一致する最初の要素だけを含むように制限している.ここでは、mongodbの公式の例があり、$
の役割は、type中のnameをJavaScriptの対象とするnumberの値を1つ加算することであり、最後の値が-1であれば、1を減算することである.