我正在使用Mongoid (v3)访问MongoDB,并想执行以下操作:
db.sessionlogs.update(
{sessionid: '12345'}, /* selection criteria */
{'$push':{rows: "new set of data"}}, /* modification */
true /* upsert */
);这在mongo shell中工作得很好。这也正是我想要的,因为它是一个单一的原子操作,这对我来说很重要,因为我将调用它很多次。我不想做两个操作-- fetch和update。我通过mongoid尝试了很多东西,但都不能正常工作。
我如何才能在向MongoDB发送此命令的情况下摆脱MongoID?我猜在Moped级别上有一些方法可以做到这一点,但是这个库的文档基本上是不存在的。
发布于 2012-07-19 01:39:39
在编写问题时找到答案...
criteria = Sessionlogs.collection.find(:sessionid => sessionid)
criteria.upsert("$push" => {"rows" => datarow})发布于 2014-01-05 03:36:51
现在还不能使用moped,您可以使用find和modify操作来实现相同的功能(具有所有默认作用域和继承功能)
用于保存图中不存在的边的示例
edge = {source_id: session[:user_id],dest_id:product._id, name: edge_name}
ProductEdge.where(edge).find_and_modify(ProductEdge.new(edge).as_document,{upsert:true})https://stackoverflow.com/questions/11547193
复制相似问题