MongoDB:使用嵌入数组的大小更新字段

标签 mongodb

我有一个带有数组的文档集合(在本例中为set):my_array

我会定期向此集合添加内容

collection.find({ "_id": target_id })
.upsert().update({ '$addToSet':{ 'my_array': new_entry }})

我在此数据库上执行的许多逻辑操作都基于此子数组的大小。因此,我创建了一个名为 len_of_array 的字段(已索引)。该索引对我的用例非常重要。

如果这是一个真正的数组而不是集合,则$incr将在同一个中完美地工作更新

但是,由于子集合是一个集合,因此集合的长度my_array可能已更改,也可能未更改。

我当前的解决方案:

为每个target_id定期调用此函数,但这需要执行查找才能获得正确的len_of_array

collection.find({ '_id': target_id})
.upsert().update({ '$set':{ 'len_of_array': new_length }})

我的问题 有没有办法在一次更新中将文档的字段设置为同一文档中子数组的索引大小?

最佳答案

您不需要字段 length_of_array 来按其大小进行查询。有$size operator 。这也可以节省您定期更新的时间。

假设您要查找 my_array 长度大于 2 的所有文档:

db.coll.find({ "my_array":{ "$size" :{ "$gt": 2 }}})

关于MongoDB:使用嵌入数组的大小更新字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34674228/

相关文章:

mongodb - PHP、Mongo 查询使用或和点表示法

javascript - Ruby MongoDB 驱动程序客户端查询匹配器

javascript - 将回调函数传递给 Mongoose 聚合函数

python - PyMongo 中的 MapReduce

arrays - 如何访问mongodb数组中的元素

mongodb - 如何通过同一文档中的另一个字段 $inc 一个字段?

javascript - 未知的顶级运营商 : $orderby

python - 反正有没有使用mongoengine在列中获得最大值?

node.js - 连接到node.js中的mongodb时无法读取未定义的属性 'collection'?

javascript - 在 promise 中定义异步函数