我有一个带有数组
的文档集合
(在本例中为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/