配列を含むドキュメントのコレクションがMongoDBにある場合は、必要に応じてそれらの配列に新しい値を追加できます。
特定の要件に応じて、$push
を使用できます 演算子または$addToSet
オペレーター。
$push
オペレーター
products
というコレクションがあるとします。 次のドキュメントを使用:
{ "_id" : 1, "product" : "Bat", "sizes" : [ "S", "M", "L" ] } { "_id" : 2, "product" : "Hat", "sizes" : [ "S", "L", "XL" ] } { "_id" : 3, "product" : "Cap", "sizes" : [ "M", "L" ] }
そして、ドキュメント3の配列に値を追加したいとします。
$push
を使用できます update()
と組み合わせて 値を追加するには:
db.products.update(
{ _id: 3 },
{ $push: { sizes: "XL" } }
)
コレクションをもう一度見て、変更を確認しましょう:
db.products.find()
結果:
{ "_id" : 1, "product" : "Bat", "sizes" : [ "S", "M", "L" ] } { "_id" : 2, "product" : "Hat", "sizes" : [ "S", "L", "XL" ] } { "_id" : 3, "product" : "Cap", "sizes" : [ "M", "L", "XL" ] }
値がXL
であることがわかります ドキュメント3のアレイに追加されました。
$push
演算子は、$position
などのさまざまな修飾子と一緒に使用することもできます 、$sort
、および$slice
。
$each
を使用して、配列に複数の値を追加することもできます。 修飾子。
MongoDB $push
を参照してください 例として。
$addToSet
オペレーター
$addToSet
演算子は$push
と同じように機能します 、いくつかのことを除いて:
- 追加しようとしている値がすでに配列に存在する場合、その値は追加されません。
-
$position
、$sort
、および$slice
修飾子は$addToSet
では使用できません 。
コレクションが次のようになっているとします。
{ "_id" : 1, "product" : "Bat", "sizes" : [ "S", "M", "L", "XL" ] } { "_id" : 2, "product" : "Hat", "sizes" : [ "S", "L", "XL" ] } { "_id" : 3, "product" : "Cap", "sizes" : [ "S", "M", "L", "XL" ] }
ドキュメント2の配列に複数の値を挿入しましょう:
db.products.update(
{ _id: 2 },
{
$addToSet: {
sizes: {
$each: [ "XXL", "XXXL" ]
}
}
}
)
それでは、コレクションをもう一度確認しましょう:
db.products.find()
結果:
{ "_id" : 1, "product" : "Bat", "sizes" : [ "S", "M", "L", "XL" ] } { "_id" : 2, "product" : "Hat", "sizes" : [ "S", "L", "XL", "XXL", "XXXL" ] } { "_id" : 3, "product" : "Cap", "sizes" : [ "S", "M", "L", "XL" ] }
ドキュメント2の配列に2つの値が期待どおりに追加されていることがわかります。
この例では、$each
を使用しています $push
でも使用できる修飾子 オペレーター。
$each
のみを使用しました 複数の値を追加していたため、修飾子。値を1つだけ使用している場合は、$each
を省略できたはずです。 修飾子を指定すると、構文は上記の$push
のようになります。 例。
前述のように、値がすでに存在する場合、その値は追加されません。また、両方の演算子を使用して配列を追加すると、配列全体が既存の配列内に個別の値として追加されます。
MongoDB $addToSet
を参照してください その他の例については。