簡體   English   中英

MongoDB在任意數組位置遞增

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM