MongoDB $set
更新演算子は、フィールドの値を指定された値に置き換えます。
これは、更新操作と組み合わせて使用されます。たとえば、update()
を使用する場合などです。 ドキュメントを更新する方法。
例
dogs
というコレクションがあるとします。 次のドキュメントで:
{ "_id" : 1, "name" : "Wag", "weight" : 20 }
そして、犬の体重を変えたいとしましょう。次のupdate()
を実行できます 重みを更新するコマンド:
db.dogs.update(
{ _id: 1 },
{
$set: { weight: 30 }
}
)
これにより、次の出力が生成されます。
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
これは、1つのドキュメントが一致して変更されたことを示しています。
コレクションを確認しましょう:
db.dogs.find()
結果:
{ "_id" : 1, "name" : "Wag", "weight" : 30 }
重みが指定された値に更新されたことがわかります。
指定した量だけ値をインクリメントすることもできますが、そのためには$inc
を使用する必要があります。 $set
の代わりに演算子 。
しかし、この記事はすべて$set
に関するものです オペレーターなので、続けましょう。
フィールドが存在しない場合
更新しようとしているフィールドが存在しない場合、そのフィールドは指定された値でドキュメントに追加されます。
例:
db.dogs.update(
{ _id: 1 },
{
$set: { height: 40 }
}
)
出力:
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
1つのドキュメントが一致して変更されたことがわかります。
コレクションをもう一度確認しましょう。
db.dogs.find()
結果:
{ "_id" : 1, "name" : "Wag", "weight" : 30, "height" : 40 }
これで、ドキュメントにheight
が含まれるようになりました 指定された値のフィールド。
埋め込みドキュメント
ドット表記を使用して、埋め込みドキュメントの値を更新できます。指定されたパスがまだ存在しない場合は、作成されます。
例:
db.dogs.update(
{ _id: 1 },
{
$set: {
"meals.breakfast": "Fish",
"meals.lunch": "Chicken",
"meals.dinner": "Beef"
}
}
)
出力:
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
findOne()
を使用しましょう ドキュメントを返すには:
db.dogs.findOne()
結果:
{ "_id" : 1, "name" : "Wag", "weight" : 30, "height" : 40, "meals" : { "breakfast" : "Fish", "dinner" : "Beef", "lunch" : "Chicken" } }
埋め込まれたドキュメントが指定どおりに追加されたことがわかります。
配列
更新する要素のインデックスを指定しながら、ドット表記を使用して配列のデータを更新できます。
次のドキュメントがあるとします。
{ "_id" : 1, "name" : "Wag", "awards" : [ "Top Dog", "Best Dog", "Biggest Dog" ] }
2つの配列要素と犬の名前を更新しましょう。
db.dogs.update({
_id: 1
}, {
$set: {
"name": "Bark",
"awards.0": "Bottom Dog",
"awards.1": "Worst Dog"
}
})
結果:
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
1つのドキュメントが一致して変更されたことがわかります。
そして今、ドキュメントを見てください。
db.dogs.findOne()
結果:
{ "_id" : 1, "name" : "Bark", "awards" : [ "Bottom Dog", "Worst Dog", "Biggest Dog" ] }