Mongoid 5:find_one_and_update with returnNewDocument

时间:2016-04-12 16:05:27

标签: ruby-on-rails ruby mongodb mongoid mongoid5

当与returnNewDocument一起使用时,Mongoid,v5.1.2是否可以忽略find_one_and_update选项?

请考虑以下代码:

next_number = TrackingId.where(id: id).find_one_and_update({
    :$inc => {
      auto_increment_counter: 1
    }
  },
  upsert: true,
  returnNewDocument: true
).auto_increment_counter

其中auto_increment_counter是该类的整数field :auto_increment_counter, type: Integer, default: 0

但是,当找不到文档时,它会创建一个文档,但它不会返回新创建的文档。所以我从nil返回find_one_and_update,然后它就会中断。

1 个答案:

答案 0 :(得分:3)

我怀疑mongoid实现find_one_and_update会将returnNewDocument的标志更改为return_new_document或$ returnNewDocument。我稍后会看一下mongoid代码库并确认。

更新:所以我玩撬了一下,然后查看了代码。我后来也能在文档中证实这一点。您要查找的选项是return_document,您可以将其设置为:before或:after(请参阅docs:http://www.rubydoc.info/github/mongoid/mongoid/Mongoid%2FContextual%2FMongo%3Afind_one_and_update

因此您的查询应该是:

next_number = TrackingId.where(id: id).find_one_and_update({
    :$inc => {
      auto_increment_counter: 1
    }
  },
  upsert: true,
  return_document: :after
).auto_increment_counter