Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 当存在自定义id时,mongo ruby驱动程序不会在upsert上创建新文档_Ruby On Rails_Ruby_Mongodb - Fatal编程技术网

Ruby on rails 当存在自定义id时,mongo ruby驱动程序不会在upsert上创建新文档

Ruby on rails 当存在自定义id时,mongo ruby驱动程序不会在upsert上创建新文档,ruby-on-rails,ruby,mongodb,Ruby On Rails,Ruby,Mongodb,我想使用mongo ruby驱动程序,使用如下内容来升级文档- id = "#{params[:id]}:#{Time.now.strftime("%y%m%d")}" # db.collection('metrics').insert({'_id' => id}) db.collection('metrics').update( { '_id' => id }, { '$inc' => { "hits" => 1 } }, { 'upsert' =>

我想使用mongo ruby驱动程序,使用如下内容来升级文档-

id = "#{params[:id]}:#{Time.now.strftime("%y%m%d")}"
# db.collection('metrics').insert({'_id' => id})
db.collection('metrics').update(
  { '_id' => id },
  { '$inc' => { "hits" => 1 } },
  { 'upsert' => true }
)
现在,这只会更新现有文档,如果文档不存在,则不会创建文档。它执行这两个操作的唯一方法是取消对其上方的insert()命令的注释


如果我使用mongo控制台并尝试直接执行此upsert(不需要insert()),它将按预期工作。

在参数中应使用符号而不是字符串。这个代码有效

db.collection('metrics').update(
  { '_id' => id },
  { '$inc' => { "hits" => 1 } },
  { :upsert => true }
)
事实上,你可以在任何地方使用符号。这也适用于:

db.collection(:metrics).update(
  { :_id => id },
  { :$inc => { :hits => 1 } },
  { :upsert => true }
)