2016-01-08 65 views
0

我(在这种情况下set)具有文档的collectionarraymy_arrayMongoDB的:与嵌入式阵列的尺寸更新领域

我添加的东西到这个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

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

比方说,你想找到的所有文件针对的my_array长度大于2:

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

感谢。我正确的假设没有办法索引'$ size'我会更新我的问题来解释该字段'len_of_array'也被索引。 – puj

+1

@puj只需索引数组。 –

+0

哇。谢了哥们。 – puj