2012-03-18 26 views
0

私はRedis/Resqueのワーカーの一員としてレコードを自分のDBに挿入するための単純なRubyスクリプト(レール、シナトラなどはありません)を持っています。MongodbとRuby gem - レコードが存在するかどうかをチェック

新しいインサートを行う代わりに、既存のレコードのカウンターフィールドを更新したいと思います。私はrails/mysqlでこれを手軽にやることができます。純粋なRubyでMongodbを使ってこれを行う最速の方法は何ですか?

おかげで、

エド

答えて

2

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のドキュメントをチェックアウトする場合があります。

+0

ありがとうございますevnu - これは間違いなくカウンタの更新を処理します。初期の.findがnilを返すかどうかは、新しいinsert文に入れることができると思います。 –

+1

はい、または「upsert」を使用できます。これは、文書がすでに存在する場合にのみ更新され、文書が存在しない場合には挿入されます。このマニュアルでは、 'update'に渡す必要のあるオプションについて説明します。 – evnu

+0

ああああ!すぐにチェックアウトします!ありがとう! –

0

envuのおかげで、私は最後にupsertと一緒に行きました。 Rubyクライアントを使用する方法の例の抜粋です:

link_id = @globallinks.update(
     { 
     ":url" => "http://somevalue.com" 
     }, 
     { 
     '$inc' => {":totalcount" => 1}, 
     '$set' => {":timelastseen" => Time.now} 
     }, 
     { 
     :upsert=>true 
     } 
    ) 
関連する問題