私はRedis/Resqueのワーカーの一員としてレコードを自分のDBに挿入するための単純なRubyスクリプト(レール、シナトラなどはありません)を持っています。MongodbとRuby gem - レコードが存在するかどうかをチェック
新しいインサートを行う代わりに、既存のレコードのカウンターフィールドを更新したいと思います。私はrails/mysqlでこれを手軽にやることができます。純粋なRubyでMongodbを使ってこれを行う最速の方法は何ですか?
おかげで、
エド
私はRedis/Resqueのワーカーの一員としてレコードを自分のDBに挿入するための単純なRubyスクリプト(レール、シナトラなどはありません)を持っています。MongodbとRuby gem - レコードが存在するかどうかをチェック
新しいインサートを行う代わりに、既存のレコードのカウンターフィールドを更新したいと思います。私はrails/mysqlでこれを手軽にやることができます。純粋なRubyでMongodbを使ってこれを行う最速の方法は何ですか?
おかげで、
エド
MongoDBのためのRubyクライアントライブラリは非常に便利で使いやすいです。だから、これと似たような使用し、MongoDBの中で文書を更新する:
#!/usr/bin/ruby
require 'mongo'
database = Mongo::Connection.new.db("yourdatabasename")
# get the document
x = database.find({"_id" => "12312132"})
# change the document
x["count"] = (x["count"] || 0) + 1
# update it in mongodb
database["collection"].update("_id" => "thecollectionid", x)
をあなたにもMongoDBの中manual for updatingのドキュメントをチェックアウトする場合があります。
envuのおかげで、私は最後にupsertと一緒に行きました。 Rubyクライアントを使用する方法の例の抜粋です:
link_id = @globallinks.update(
{
":url" => "http://somevalue.com"
},
{
'$inc' => {":totalcount" => 1},
'$set' => {":timelastseen" => Time.now}
},
{
:upsert=>true
}
)
ありがとうございますevnu - これは間違いなくカウンタの更新を処理します。初期の.findがnilを返すかどうかは、新しいinsert文に入れることができると思います。 –
はい、または「upsert」を使用できます。これは、文書がすでに存在する場合にのみ更新され、文書が存在しない場合には挿入されます。このマニュアルでは、 'update'に渡す必要のあるオプションについて説明します。 – evnu
ああああ!すぐにチェックアウトします!ありがとう! –