MongoDBでは、$pop
を使用できます 配列から最初または最後の要素を削除する演算子。
$pop
を使用する update()
などのメソッドと組み合わせて 指定したドキュメントを変更で更新します。
-1
を使用する 最初の要素を削除し、1
最後を削除します。
例
products
というコレクションがあるとします。 次のドキュメントを使用:
{ "_id" : 1, "prod" : "Bat", "sizes" : [ "S", "M", "L", "XL" ] } { "_id" : 2, "prod" : "Hat", "sizes" : [ "S", "M", "L", "XL" ] } { "_id" : 3, "prod" : "Cap", "sizes" : [ "S", "M", "L" ] }
最初の要素を削除する
次のように、ドキュメント1の配列の最初の要素を削除できます。
db.products.update(
{ _id: 1 },
{ $pop: { sizes: -1 } }
)
出力:
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
このメッセージは、1つのドキュメントが一致し、1つ(つまり同じドキュメント)が変更されたことを示しています。
今すぐコレクションを見てみましょう:
db.products.find()
結果:
{ "_id" : 1, "prod" : "Bat", "sizes" : [ "M", "L", "XL" ] } { "_id" : 2, "prod" : "Hat", "sizes" : [ "S", "M", "L", "XL" ] } { "_id" : 3, "prod" : "Cap", "sizes" : [ "S", "M", "L" ] }
ドキュメント1の配列の最初の要素が削除されていることがわかります。
最後の要素を削除
次に、ドキュメント2の配列から最後の要素を削除しましょう。
db.products.update(
{ _id: 2 },
{ $pop: { sizes: 1 } }
)
出力:
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
それでは、コレクションをもう一度確認しましょう:
db.products.find()
結果:
{ "_id" : 1, "prod" : "Bat", "sizes" : [ "M", "L", "XL" ] } { "_id" : 2, "prod" : "Hat", "sizes" : [ "S", "M", "L" ] } { "_id" : 3, "prod" : "Cap", "sizes" : [ "S", "M", "L" ] }
ドキュメント2の配列から最後の要素が削除されていることがわかります。
すべてのドキュメントを更新
updateMany()
を使用する例を次に示します。 すべてのドキュメントを更新する方法:
db.products.updateMany(
{ },
{ $pop: { sizes: 1 } }
)
出力:
{ "acknowledged" : true, "matchedCount" : 3, "modifiedCount" : 3 }
そして、コレクションを再確認します:
db.products.find()
結果:
{ "_id" : 1, "prod" : "Bat", "sizes" : [ "M", "L" ] } { "_id" : 2, "prod" : "Hat", "sizes" : [ "S", "M" ] } { "_id" : 3, "prod" : "Cap", "sizes" : [ "S", "M" ] }
または、update()
を使用することもできます multi: true
を指定して複数のドキュメントを更新する方法 。