【问题标题】:Update nested hash MongoDB - Ruby更新嵌套哈希 MongoDB - Ruby
【发布时间】:2014-07-27 17:48:17
【问题描述】:

我正在尝试用一个简单的值更新 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}},                           
})

我已经尝试过Updating nested document in MongoDB,但我看不出我做错了什么

【问题讨论】:

  • 您使用push 将元素附加到数组。我想它为第一个元素创建了数组,所以你最终得到[ value ]。但是,您可能可以使用set 插入单个值。所以像'$set' => { "stream.#{time}" => views }。我自己没有 MongoDB,所以你应该先尝试一下:)

标签: ruby mongodb mongodb-ruby


【解决方案1】:

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


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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-03
    • 1970-01-01
    • 2019-02-21
    • 2019-08-08
    • 2021-02-03
    • 2018-04-24
    相关资源
    最近更新 更多