MongoDB:具有嵌入式数组大小的更新字段

时间:2016-01-08 10:02:21

标签: mongodb

我有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 }})

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

1 个答案:

答案 0 :(得分:2)

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

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

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