我尝试使用简单值更新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,但我无法看到自己的错误
答案 0 :(得分:0)
DaniëlKnippers是正确的 - 使用$set
应该有效。我还注意到你使用的是id
而不是'_id`。也许是一个错字?
编辑:请注意,通常不建议使用动态键值,因为它们很难索引和查询。考虑数组中哈希的stream
结构:
{
'_id' : ...
'stream' : [
{'time' : 1406481985, 'views': 35603},
{'time' : 1406481990, 'views': 15000}
]
}
现在,您可以轻松查询time
和views
字段。