実際には、その位置に基づいて配列から要素を削除する必要があります。$ popを使用すると、ここで説明するように、要素を上または下から削除できます(スタックと見なされます。上部の0番目の要素)。
ここで説明するように、$ pullを使用して、配列内の要素の値に基づいて配列から要素を削除することもできます。
しかし、位置に基づいて配列から要素を削除する必要があります。だから私がこれを行うことができる方法はありますか?
実際には、その位置に基づいて配列から要素を削除する必要があります。$ popを使用すると、ここで説明するように、要素を上または下から削除できます(スタックと見なされます。上部の0番目の要素)。
ここで説明するように、$ pullを使用して、配列内の要素の値に基づいて配列から要素を削除することもできます。
しかし、位置に基づいて配列から要素を削除する必要があります。だから私がこれを行うことができる方法はありますか?
ドキュメントから:
{ $pull : { field : {$gt: 3} } } removes array elements greater than 3
だから私はあなたが今のところこのような何かをすることができると思います:
{ $pull : { field : {$gt: 3, $lt: 5} } } // shoud remove elemet in 4 position
または、位置演算子を使用して更新してみてください。次のようになります。
{ $pull : "field.4" }
{ $pull : {"field.$": 4}}
私は今それをテストすることができないので、それは単なる提案です。
アップデート:
ワンステップで正しく理解できないようです(jiraにはそのようなバグがあります)
ただし、未設定の要素を所定の位置に使用して削除することができ、null値の要素をプルします。
{$unset : {"array.4" : 1 }}
{$pull : {"array" : null}}
これは、最新のmongodb v4.2でそれを行うことができる方法であり、醜いですが機能しています
_id: ObjectId("5e4539cb6aebbeaa0a6b8fe7")
}, [
{ $set:
{ notes:
{
$concatArrays: [
{ $slice: ['$notes', 4] },
{ $slice: ['$notes', { $add: [1, 4] }, { $size: '$notes' }]}
]
}
}
}
])```
これがあなたの答えです:MongoDBはコレクションから配列要素をプルします
ドキュメントの配列から特定の要素を削除するには、最初にこの要素を識別する必要があります。たとえば、配列を含むドキュメントがあり、この配列のすべての要素がオブジェクトです。
{
"_id" : ObjectId("5140f34888dd50971900002d"),
"_permissions" : {
"edit" : [
{
"profile_id" : NumberLong(123),
"comment" : "app/project owner"
},
{
"profile_id" : NumberLong("153579099841888257"),
"comment" : "project admin"
},
{
"profile_id" : NumberLong("153579095869882369"),
"comment" : "project admin"
}
],
"view" : [
{
"profile_id" : NumberLong(123),
"comment" : "app/project owner"
},
{
"profile_id" : NumberLong("153579099841888257"),
"comment" : "project admin"
},
{
"profile_id" : NumberLong("153579095869882369"),
"comment" : "project admin"
}
]
}
}
profile_id
それでは、配列から「153579099841888257」の値で削除しましょう_permissions.view
。どうぞ
db.collection.update({_id: ObjectId("5140f34888dd50971900002d")}, {$pull:{"_permissions.view": {"profile_id": NumberLong("153579099841888257")}}});
profile_id
の「153579099841888257」値を使用_permissions.view