2016-01-08 90 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