Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mongodb 按索引从数组中删除元素_Mongodb_Mongodb Query - Fatal编程技术网

Mongodb 按索引从数组中删除元素

Mongodb 按索引从数组中删除元素,mongodb,mongodb-query,Mongodb,Mongodb Query,根据,按索引从数组中删除元素意味着两种不同的更新: db.lists.update({}, {$unset : {"interests.0" : 1 }}) db.lists.update({}, {$pull : {"interests" : null}}) 这很有效。。。但它引入了一些复杂性,使操作原子化并防止竞争条件。有关于这个话题的最新消息吗?有,没有,真的。考虑下面的数组: {array:[{a:a,b:b},{a:a,b:c}] 因此,您可以使用下面的语句从这里导出第二个元素:

根据,按索引从数组中删除元素意味着两种不同的更新:

db.lists.update({}, {$unset : {"interests.0" : 1 }})
db.lists.update({}, {$pull :  {"interests" : null}})

这很有效。。。但它引入了一些复杂性,使操作原子化并防止竞争条件。有关于这个话题的最新消息吗?

有,没有,真的。考虑下面的数组:

{array:[{a:a,b:b},{a:a,b:c}]
因此,您可以使用下面的语句从这里导出第二个元素:

db.collection.update({},{$pull:{array:{a:a,b:b})
这将删除匹配的文档。但如果在该阵列上执行相同的操作:

{array:[{a:a,b:b},{a:a,b:c,c:c},{a:a,b:c}]}
那么结果就是:

{array:[{a:a,b:b}]}
因此,查询匹配了数组中的两个文档,并将它们都提取出来

不幸的是,这似乎是显而易见的:

db.collection.update({},{$pull:{array:{$elemMatch:{a:“a”,b:“b”})
只是不起作用。真遗憾。在这个时候太难解析的篮子中

因此,这个故事的寓意是,如果你真的关心这种类型的更新的并发性和竞争条件,
.find()
首先找到匹配的元素,然后用一条与整个文档匹配的语句
,只要它将也将部分匹配数组中的另一个文档

如果你不能做到这一点,那么你在问题中描述的方法是目前唯一的方法


这方面存在一个问题,但它并不是非常流行。

除非它是一个cron作业,否则它可能可以在客户端处理,并且集合会在事后自动更新。在前一种情况下,也许您可以在更改完成后进行原子更新。