3

是否有可能,Mongoid,v5.1.2returnNewDocument在与 一起使用时会忽略该选项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,它坏了。

4

1 回答 1

4

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

更新:所以我玩了一把,看了看代码。我后来也能够在文档中确认这一点。您正在寻找的选项是 return_document,您将其设置为 :before 或 :after (请参阅文档: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
于 2016-04-18T17:12:10.380 回答