如何使用mongoid/moped进行upsert/push

Leo*_*opd 9 ruby mongodb mongoid mongoid3 moped

我正在使用Mongoid(v3)来访问MongoDB,并希望执行此操作:

db.sessionlogs.update( 
    {sessionid: '12345'}, /* selection criteria */
    {'$push':{rows: "new set of data"}},  /* modification */
    true /* upsert */
);
Run Code Online (Sandbox Code Playgroud)

这在mongo shell中工作正常.它也正是我想要的,因为它是一个单一的原子操作,对我来说很重要,因为我会调用它.我不想做两个操作 - 获取然后更新.我通过mongoid尝试了很多东西,但无法让它工作.

如何将MongoID取出并将此命令发送到MongoDB?我猜测在Moped级别有一些方法可以做到这一点,但该库的文档基本上不存在.

Leo*_*opd 10

[在写这个问题的时候发现答案......]

criteria = Sessionlogs.collection.find(:sessionid => sessionid)
criteria.upsert("$push" => {"rows" => datarow})
Run Code Online (Sandbox Code Playgroud)