2014-09-18 167 views
1

我在下面的格式保存在MongoDB的数据find()方法从MongoDB中,返回结果,剿领域,变成JSON

{"_id": "VALVE22","state": "1","element": "BNK1FLOW","data":{"type": "SEN","descr": "TOWER6"}}

我有一个Ruby脚本下面的代码;

db = Mongo::Connection.new.db("cooler-lookup") 
coll = db.collection("elements") 
kitty = coll.find({"_id" => table[address][i], "state" => char}).to_a 

'table[address][i]' and 'char'是限定在更大的脚本数据馈送其他地方使用到该查找部分&变量。为了测试,这些可分别替换为“VALVE22”和“1”(这就是我在irb中测试的结果)

从命令行运行脚本时,脚本从有效查询中输出以下正确结果。

{"_id"=>"VLAVE22", "state"=>"1", "element"=>"BNK1FLOW", "data"=>{"type"=>"SEN", "descr"=>"TOWER6"}}

但我需要抑制_id and state领域。我尝试过以各种方式使用:fields修饰符,但无法删除字段。我已经在irb中进行了测试,并且随着有效查找,我还返回了=> nil。我敢肯定这是非常简单的事情,但我不明白我需要什么能够JSON.generate查询结果没有ID &国家字段,然后puts它。

使用下面的代码我能够得到这个工作,但是当我试图做kittylitter = JSON.generate(kitty)我得到了很多空[]的以及我的有效结果。它看起来像是从数据库中失败的查询返回而没有记录。

多小时就被混淆后,我设法找到这段代码来解决这个问题

kitty.each do |key| 
keyjson = JSON.generate(key) 
puts keyjson 
end 

这给了我,我需要出去到底是什么 - 这是在1号线为有效的JSON结果。部分头部伤害了混淆来自于事实to.a创建了一个数组,但是当我试图对结果kitty执行数组类型的东西时,没有任何按预期工作。然后我试着把它当作一个哈希来处理,这导致了我上面那段代码!一旦我完成了所有工作......我错了被数组和哈希弄糊涂了,或者我错过了像我的数组一样明显的东西包含哈希?

回答

1

这个工作对我来说:

kitty = coll.find({"_id" => table[address][i], "state" => char}, :fields => {"_id" => 0, "state" => 0}).to_a 

它返回

[{"element"=>"BNK1FLOW", "data"=>{"type"=>"SEN", "descr"=>"TOWER6"}}] 

http://api.mongodb.org/ruby/current/Mongo/Collection.html#find-instance_method有关使用说明的Mongo::Collection#find

+0

感谢 - 不知道我在做什么,昨晚那么它不工作。也许花了很长时间看它变得困惑。这对我很有用,但是当我做'kittylitter = JSON.generate(kitty)'时,我得到了期望的结果,但是我也得到了很多空的'[]''有没有什么方法可以让我摆脱这些? – user3788685 2014-09-19 20:17:46

+0

@ user3788685 - 你的意思是空{'}'?听起来就像你有一些匹配查询的文档,但没有除_id和状态之外的任何键。看看Ruby Array#select(http://www.ruby-doc.org/core-2.1.2/Array。html#method-i-select) – 2014-09-19 20:21:47

+0

从命令行运行脚本时,它的'[]'我得到deffo而不是'{}'我想知道它是不是什么都没有返回的查询。当从table [address] [i]接收到数据时,它实际上做了8次查找,它们中的一部分,全部或全部都不会导致DB中的有效结果。数据库只包含一些对象,它们都有有效的全键,在数据库中根本不存在的东西根本不存在。我对你给出的链接进行了检查 - 我想我有一个'for(i = 0; i user3788685 2014-09-19 20:28:55