实际上我需要根据它的位置从数组中删除一个元素。使用$ pop我们可以从顶部或底部删除元素(将其视为堆栈。顶部的第0个元素),如here所述。
我们也可以使用$ pull按照数组中元素的值从数组中删除元素,如here所述。
但我需要根据位置从数组中删除元素。那么我有什么方法可以做到这一点。
答案 0 :(得分:7)
来自文档:
{ $pull : { field : {$gt: 3} } } removes array elements greater than 3
所以我想你现在可以做这样的事情:
{ $pull : { field : {$gt: 3, $lt: 5} } } // shoud remove elemet in 4 position
或者尝试使用position operator进行更新,我想应该是这样的:
{ $pull : "field.4" }
{ $pull : {"field.$": 4}}
这只是一个建议,因为我现在无法测试它。
<强>更新强>
似乎你不能一步到位就知道(有bug in jira}
但你可以在位置使用未设置元素并使用空值拉取元素:
{$unset : {"array.4" : 1 }}
{$pull : {"array" : null}}
答案 1 :(得分:1)
这是使用最新的mongodb v4.2做到这一点的方法,虽然丑陋但仍有效
_id: ObjectId("5e4539cb6aebbeaa0a6b8fe7")
}, [
{ $set:
{ notes:
{
$concatArrays: [
{ $slice: ['$notes', 4] },
{ $slice: ['$notes', { $add: [1, 4] }, { $size: '$notes' }]}
]
}
}
}
])```
答案 2 :(得分:0)
这是你的回答MongoDB pull array element from a collection
要首先从某个文档的数组中删除特定元素,您需要标识此元素。例如,我有一个带数组的文档,这个数组的每个元素都是一个对象:
`{ "_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" } ] } }`
所以让我们从“_permissions.view”数组中删除带有“153579099841888257”值的“profile_id”。 我们走了
`db.collection.update({_id: ObjectId("5140f34888dd50971900002d")}, {$pull:{"_permissions.view": {"profile_id": NumberLong("153579099841888257")}}});`