更新嵌套哈希MongoDB - Ruby

时间:2014-07-27 17:48:18

标签: ruby mongodb mongodb-ruby

我尝试使用简单值更新MongoDB doc中的哈希值,但它将值存储在数组中。我使用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}},                           
})

我已经尝试Updating nested document in MongoDB,但我无法看到自己的错误

1 个答案:

答案 0 :(得分:0)

DaniëlKnippers是正确的 - 使用$set应该有效。我还注意到你使用的是id而不是'_id`。也许是一个错字?


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

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

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