MongoDBでは、$pushを使用できます 配列に値を追加する演算子。
この演算子は、さまざまな修飾子とともに使用できます。その1つが$positionです。 修飾子。 $position モディファイアを使用すると、新しい値を挿入する配列内の位置を指定できます。
配列の先頭に値を追加する
次のコレクションがあるとします。
{ "_id" : 1, "prod" : "Bat", "sizes" : [ "S", "M", "XL" ] }
{ "_id" : 2, "prod" : "Hat", "sizes" : [ "S", "L", "XL" ] }
{ "_id" : 3, "prod" : "Cap", "sizes" : [ "M", "L" ] } そして、ドキュメント3の配列の先頭に値を追加したいとします。
これを行うことができます:
db.products.update(
{ _id: 3 },
{
$push: {
sizes: {
$each: [ "S" ],
$position: 0
}
}
}
) それでは、コレクションをもう一度確認しましょう:
db.products.find() 結果:
{ "_id" : 1, "prod" : "Bat", "sizes" : [ "S", "M", "XL" ] }
{ "_id" : 2, "prod" : "Hat", "sizes" : [ "S", "L", "XL" ] }
{ "_id" : 3, "prod" : "Cap", "sizes" : [ "S", "M", "L" ] }
配列はゼロベースであるため、position: 0 配列の最初の要素として値を追加します。
配列の中央に値を追加する
値Mを追加するとします。 ドキュメント2に、Sの間に配置する必要があります およびL 。
その方法は次のとおりです。
db.products.update(
{ _id: 2 },
{
$push: {
sizes: {
$each: [ "M" ],
$position: 1
}
}
}
) それでは、コレクションをもう一度確認しましょう:
db.products.find() 結果:
{ "_id" : 1, "prod" : "Bat", "sizes" : [ "S", "M", "XL" ] }
{ "_id" : 2, "prod" : "Hat", "sizes" : [ "S", "M", "L", "XL" ] }
{ "_id" : 3, "prod" : "Cap", "sizes" : [ "S", "M", "L" ] }
$position: 1を使用しました 、それが私たちが望んでいた位置だからですM 移動します(つまり、2番目の位置)。
負の値
位置として負の値を指定することもできます。これを行うと、値は最後から数えて指定された負の位置に挿入されます。
Lを挿入するとします。 Mの間 およびXL ドキュメント1。
ネガティブポジションを使用してこれを行う方法は次のとおりです。
db.products.update(
{ _id: 1 },
{
$push: {
sizes: {
$each: [ "L" ],
$position: -1
}
}
}
) 結果を確認します:
db.products.find() 結果:
{ "_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" ] }
負のインデックス位置で、$eachに複数の要素を指定した場合 配列の場合、最後に追加された要素は最後から指定された位置にあります。