0

我正在尝试使用简单值更新 MongoDB 文档中的哈希,但它将值存储在数组中。我使用 mongo 的 ruby​​ 驱动程序

代码会更好地解释,因为我的英语不好。

我有的 :

{
    'id' : ...
    'stream' : {
            "1406481985(a timestamp)" : 35603
     }
}

我想要的是 :

{
    'id' : ...
    'stream' : {
            "1406481985" : 35603,
            "1406481990" : 15000
     }
}

我得到什么:

{
    'id' : ...
    'stream' : {
            "1406481985" : 35603,
            "1406481990" : [
                                   15000
            ]
     }
}

我是怎么到那里的:

views = 15000
time = Time.now
coll.find_and_modify({
    query: {:id => id},                                      
    update: {'$push' => {"stream.#{time}" => views}},                           
})

我已经尝试过在 MongoDB 中更新嵌套文档,但我看不出我做错了什么

4

1 回答 1

0

Daniël Knippers 是正确的——使用$set应该可以。我还注意到您使用id的是“_id”而不是“_id”。也许是错字?


编辑:请注意,通常不建议使用动态键值,因为它们难以索引和查询。考虑一个stream数组内的哈希结构:

{
    '_id' : ...
    'stream' : [
            {'time' : 1406481985, 'views': 35603},
            {'time' : 1406481990, 'views': 15000}
    ]
}

现在您可以轻松查询timeviews字段。

于 2014-07-27T20:30:34.307 回答