繁体   English   中英

从MongoDB中查找()(),返回结果,强制字段并转换为JSON

[英]find() from MongoDB, return result, supress fields and turn into JSON

我将数据以以下格式保存在MongoDB中

{"_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和State字段即可JSON.generate查询结果,然后putsputs

使用下面的代码,我可以正常工作,但是当我尝试执行kittylitter = JSON.generate(kitty)我得到了很多空[]以及有效结果。 看起来他们从数据库返回的失败查询没有记录。

经过数小时的困惑,我设法找到了这段代码来解决问题

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

这正是我需要的东西-这是有效的JSON在1行上的结果。 我的头伤混乱,部分来自于一个事实to.a使一个阵列,但是当我试图做的结果数组类型的东西kitty什么都不会达到预期效果。 然后,我尝试将其像哈希一样对待,这导致我进入了上面的代码! 一旦我完成一切工作,...我是否会被数组和散列所迷惑,还是错过了一些真正显而易见的东西,例如我的数组包含哈希?

这对我有用:

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

它返回

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

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

使用gem mongo -v 2.4.3 ,以下对我有用

mongo_results = collection.find({"shop_id" => shop_id}, :projection => {"_id" => 0, "child_products" => 0}).to_a

在上面的示例中,我省略了“ _id”和“ child_products”在结果中的显示。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM