Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.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 Mongoid upsert域_Ruby_Mongodb_Mongoid - Fatal编程技术网

Ruby Mongoid upsert域

Ruby Mongoid upsert域,ruby,mongodb,mongoid,Ruby,Mongodb,Mongoid,我想使用mongoid的upsert方法,但它应该检查不同于_id的字段上是否存在文档(mongoimport命令允许您使用--upsertFields选项执行此操作)。 有没有办法用mongoid做到这一点呢?我会回答我自己的问题,这应该是可以预期的: person = Person.find_or_create_by(somefield: somefield) person.update_attributes(otherfield: otherfield, somethingelse: so

我想使用mongoid的upsert方法,但它应该检查不同于_id的字段上是否存在文档(mongoimport命令允许您使用--upsertFields选项执行此操作)。
有没有办法用mongoid做到这一点呢?

我会回答我自己的问题,这应该是可以预期的:

person = Person.find_or_create_by(somefield: somefield)
person.update_attributes(otherfield: otherfield, somethingelse: somethingelse)

事实上,mongoid已经打包到your_model.collection.method中。因此,您可以这样做:

Person.collection.update_one({main_key: value}, {"$set":{key: value}}, {upsert: true})

这是可行的,但对我来说并不是最终的解决方案,因为它需要太长的时间(50秒vs 3秒的mongoimport)。欢迎任何替代解决方案