3

jenssegers laravel 5.1およびmongoDB 2.6パッケージまたは少なくともmongo 2.6で「findAndModify」を使用して、デフォルトの開始番号から新しいシーケンス番号を作成する方法はありますか?

カウンター コレクションがあり、その中にすべての自動インクリメント カウンターを配置しています。そして今、会計年度の開始ごとにシーケンス番号を 100000 にリセットする必要があります。

例えば

今年 (15-16) カウンターは 100,000 から開始され、12K レコードが増加し、112,000 に達しました。

来年には、カウンターは 100,000 から開始する必要があります。自動インクリメントには、以下のコードを使用しました。

public function getNextSequence($name) {
    $retval = DB::getCollection('my_counts')->findAndModify(
            array('_id' => $name), array('$inc' => array('seq' => 1)), null, 
                  array('new' => true, 'upsert' => true)
    );
    return (int) $retval['seq'];
}

以下のような収集中のデータ。

ここに画像の説明を入力

したがって、上の画像の「grants_15-16」は今年のシーケンスです。これで 16-17 になったら「grants_16-17」として渡します。したがって、その値はコレクションに存在せず、mongo はコレクションを作成します。しかし、ここでの問題は、「seq」が「1」から始まっていることです。しかし、「100000」から始めてほしいです。

そのため、以下のようにコードを変更しました。

public function getNextSequence($name) {
    $retval = DB::getCollection('test_counters')->findAndModify(
            array('_id' => $name), array('$setOnInsert' => array('seq' => 100000), 
                  '$inc' => array('seq' => 1)), 
                  null, array('new' => true, 'upsert' => true)
    );
    return (int) $retval['seq'];
}

しかし、それは以下のようなエラーを返します。

ここに画像の説明を入力

解決策を探しましたが、役に立ちません。これを手伝ってください。

前もって感謝します。

4

0 に答える 0