ruby 1.9.3p194 (2012-04-20 revision 35410) [x86_64-linux]
mongo (2.0.4)
我需要帮助查询MongoDB数据库及其gem并更新相应的字段。
编辑:我正在尝试遍历Mongo数据库的文档,下拉这些文档中特定字段的值,然后在脚本中更新它们。
目标在数据库中查询字段partner_id
为“合作伙伴”且字段state
为“已配置”的文档,并仅返回_id
下的值config
字段。
使用新生成的密码将数据库更新到每个文档config
字段。
我在我的智慧结束,因为我已经看到了大约六种不同的编写语法的方法,除非我已经知道如何做这些事情,否则文档几乎没有帮助。非常感谢任何帮助!
#!/usr/bin/env ruby
require 'json'
require 'net/http'
require 'mongo'
# Fetch the addons database URI and connect.
db_uri = ENV['DATABASE_URI']
client = Mongo::Client.new(db_uri)
# Connect to the needed collection and pull down each document to be looped over individually.
# **Having trouble getting this to work. The result is just '= []' - don't know what I'm doing wrong.
client[:collection].find("partner_id" => "partner", "state" => "provisioned", :fields => ["_id", "config"]).each {
# Need something here to pull down the values from each document's '_id' and 'config' fields and assign them to variables.
user_id =
user_config =
user_config = JSON.parse(user_config)
# ...generating password and updating other database...
# Convert the Hash of the user's new configuration into JSON, and update the original database with it.
# Not sure if any of this is correct. When querying to check, the database doesn't seem to be updated.
user_config = user_config.to_json
client[:collection].update(
{"_id" => user_id},
{'$set' => {
"config" => user_config
}
}
)
}
end
return
答案 0 :(得分:4)
你找不到任何东西,因为:
:fields => ["_id", "config"]
find
的参数不是指定您想要的字段,find
只是将其视为要查找的第三个文档字段。您的文档可能没有名为field
的字段,其值是这些字符串的数组,因此查询可以立即找不到任何内容。
如果您想限制查询,则需要使用projection
:
client[:collection].find("partner_id" => "partner", "state" => "provisioned")
.projection('_id' => 1, 'config' => 1)
.each { |doc| ... }
然后在each
区块内doc
将成为哈希,以便您可以说:
user_id = doc['user_id']
user_config = doc['user_config']
如果我正确阅读您的代码,user_config
应该是哈希,所以您可能不需要自己解析它。