在下面的示例中,假设文档位于db.people集合中。
如何通过interests数组的索引删除数组的第三个元素
{
  "_id" : ObjectId("4d1cb5de451600000000497a"),           
  "name" : "dannie",  
  "interests" : [  
    "guitar",  
    "programming",           
    "gadgets",  
    "reading"  
  ]   
}这是我目前的解决方案:
var interests = db.people.findOne({"name":"dannie"}).interests;  
interests.splice(2,1)  
db.people.update({"name":"dannie"}, {"$set" : {"interests" : interests}});有没有更直接的方法?
发布于 2011-01-04 06:19:38
没有通过数组索引直接拉/移的方法。事实上,这是一个开放的问题http://jira.mongodb.org/browse/SERVER-1014,你可以投票支持它。
解决方法是先使用$unset,然后使用$pull:
db.lists.update({}, {$unset : {"interests.3" : 1 }}) 
db.lists.update({}, {$pull : {"interests" : null}})更新:正如在一些评论中提到的,这种方法不是原子的,如果其他客户端在两个操作之间读取和/或写入,则可能会导致一些竞争条件。如果我们需要操作是原子的,我们可以:
从database
发布于 2012-10-30 09:08:13
您可以使用update操作的$pull修饰符来移除数组中的特定元素。如果您提供的查询如下所示:
db.people.update({"name":"dannie"}, {'$pull': {"interests": "guitar"}})此外,您还可以考虑使用$pullAll删除所有匹配项。有关这方面的更多信息,请访问官方文档页面- http://www.mongodb.org/display/DOCS/Updating#Updating-%24pull
这不会使用索引作为删除元素的标准,但在类似于您的情况下仍然可能会有所帮助。据我所知,使用索引来寻址数组中的元素并不是很可靠,因为mongodb在元素顺序上并不一致。
发布于 2020-06-24 17:22:17
在Mongodb 4.2中,您可以这样做:
db.example.update({}, [
     {$set: {field: {
           $concatArrays: [ 
                  {$slice: ["$field", P]}, 
                  {$slice: ["$field", {$add: [1, P]}, {$size: "$field"}]}
           ]
     }}}
]);P是要从数组中删除的元素的索引。
如果要从P中删除,直到结束:
db.example.update({}, [
     {$set: {field: {$slice: ["$field", P]}}
]);https://stackoverflow.com/questions/4588303
复制相似问题