当与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
,然后它就会中断。
答案 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