coll.save({"_id" => "test", "1" => "a"}) #=> {"_id"=>"test", "1"=>"a"}
coll.update({"_id" => "test"}, {"$set"=>{"1.2" => "b"}}) #=> {"_id"=>"test", "1"=>"a"}
我期待最后一行会创建一个新节点:{"_id"=>"test", "1"=>{"2"=>"b"}}
或{"_id"=>"test", "1"=>["a",{"2" => "b"}]}
是否可以让它创建一个不存在的节点?如果已经有一个键:值对,则取消转换为数组?
多一个:
coll.save({"_id" => "test", "1" => ["a"]}) #=> {"_id"=>"test", "1"=>["a"]}
coll.update({"_id" => "test"}, {"$set"=>{"1" => ["b"]}}) #=> {"_id"=>"test", "1"=>["b"]}
是否可以将值转换为数组而不覆盖它们?从而使以上:
#=>{"_id"=>"test", "1"=>["a","b"]}
我这样说是因为我有大型数组,如果我下载数组并在 Ruby 端取消移动它,则会产生性能开销。
对于第一个问题,集合中的文档具有多种形状,并且在 ruby 中构建一个 when:case 方法对于所有可能性来说都是很多开销/工作。
Ruby unshift:http ://www.ruby-doc.org/core-1.9.3/Array.html#method-i-unshift
::编辑::
$db.serverStatus().version
2.0.2
$gem list
mongo (1.6.2, 1.6.1, 1.5.2)
确切的代码:
require 'pp'
require 'mongo'
coll = Mongo::Connection.new.db("test").collection("test")
coll.save({"_id" => "test", "1" => "a"})
pp coll.find_one("_id"=>"test") #=> {"_id"=>"test", "1"=>"a"}
coll.update({"_id" => "test"}, {"$set"=>{"1.2" => "b"}})
#Expect, but does not give: {"_id"=>"test", "1"=>{"2"=>"b"}}
pp coll.find_one("_id"=>"test") #=> {"_id"=>"test", "1"=>"a"}