0

我想使用数组作为与此文档关联的文档的计数器。每个数组元素对应一个文档,该数组中的数字对应于该文档的一些数据。这些数字不与其关联的文档一起存储,因此可以对“主”文档的字段以及“关联”文档的数组中的数据执行查询。

由于 $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

有没有办法增加一个空值或用零初始化数组?

另一种方法是以键/值格式存储数组值,因此这将是一个稀疏数组,但是没有办法将其插入到数组中,这使得该替代方案不可行。

4

1 回答 1

1

虽然我不赞成可能无限大小的数组,但您可以使用一个技巧来使正确的事情发生在这里:

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 ] }
于 2013-11-06T04:43:34.157 回答