Techioz Blog

Ruby / Mongoid - コレクション内の値をインクリメントして新しい値を返す方法

概要

かなり古いバージョンの Mongoid を使用する Ruby on Rails コードを更新しています。次のコード行は、コレクション内の最初のドキュメントを取得し、フィールド nextid を 1 だけインクリメントし、新しい値を返します。

調査ID = SurveyId.first.safely.inc(:nextid, 1)

Mongodb をバージョン 6.0.3 に更新しましたが、安全な方法はなくなりました。単に使用する場合:

調査ID = SurveyId.first.inc(:nextid, 1)

それは機能しますが、inc は何も返さず、新しい値が何であるかわかりません。

新しい Mongoid バージョンの同等のコードは何ですか?ありがとう!

解決策

Mongoid の新しいバージョン (7+) の場合:

 surveyid = SurveyId.first.inc(nextid: 1).nextid

inc は、操作が成功すると、更新されたオブジェクトを返します。