我有collection
个文档的array
(在这种情况下为set
):my_array
我正在定期向此set
添加内容
collection.find({ "_id": target_id })
.upsert().update({ '$addToSet':{ 'my_array': new_entry }})
我在此DB上执行的许多逻辑操作都基于此子阵列的大小。所以我创建了一个名为len_of_array
的字段(索引)。该索引对我的用例非常关键。
如果这是真array
而不是set
,则$incr
可以在同一update
但是,由于子集合是set
,因此集合my_array
的长度可能已更改,也可能未更改。
我目前的解决方案:
定期为每个target_id
拨打此电话,但这需要执行查找才能获得正确的len_of_array
collection.find({ '_id': target_id})
.upsert().update({ '$set':{ 'len_of_array': new_length }})
我的问题 有没有办法在单个更新中将文档的字段设置为相同文档中子数组的索引大小?
答案 0 :(得分:2)
您不需要字段length_of_array
来查询其大小。有$size operator。这也可以为您节省定期更新。
假设您要查找my_array
长度大于2的所有文档:
db.coll.find({ "my_array":{ "$size" :{ "$gt": 2 }}})