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

Daniel Knippers は正しいです — を使用するとうまくいく$setはずです。id「_id」の代わりに使用していることにも気付きました。おそらくタイプミス?


編集: 動的なキー値はインデックス作成とクエリが難しいため、通常は推奨されないことに注意してください。stream配列内のハッシュの構造を考えてみましょう:

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

timeおよびviewsフィールドを簡単に照会できるようになりました。

于 2014-07-27T20:30:34.307 に答える