[英]MongoDB increment at arbitrary array position
我想使用數組作為與此文檔關聯的文檔的計數器。 每個數組元素都對應一個文檔,並且該數組中的數字對應於有關該文檔的一些數據。 這些編號未與它們的關聯文檔一起存儲,因此可以對“主要”文檔的字段以及“關聯”文檔的數組中的數據進行查詢。
由於$ inc和數組初始化的變化無常,因此似乎無法執行此操作:
> use foo
switched to db foo
> db.foo.save({id: []})
> db.foo.update({}, {$inc: {'id.4': 1}})
> db.foo.find().pretty()
{
"_id" : ObjectId("5279b3339a056b26e64eef0d"),
"id" : [
null,
null,
null,
null,
1
]
}
> db.foo.update({}, {$inc: {'id.2': 1}})
Cannot apply $inc modifier to non-number
有什么方法可以增加一個null或用零初始化數組嗎?
另一種選擇是將數組值存儲為鍵/值格式,因此它是稀疏數組,但是無法向上插入數組,這使得該選擇不可行。
盡管我不贊成大小可能無限的數組,但是有一個技巧可以使正確的事情在這里發生:
db.foo.insert({id:[]})
每當在索引N處增加計數器時,請確保將所有索引增加0,直至N。
db.foo.update({}, {$inc: {'id.0':0, 'id.1':0, 'id.2':0, 'id.3':0, 'id.4':1 } })
db.foo.update({}, {$inc: {'id.0':0, 'id.1':0, 'id.2':1 } })
db.foo.find()
{ "_id" : ObjectId("5279c8de0e05b308d0cf21ca"), "id" : [ 0, 0, 1, 0, 1 ] }
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.