FuelPHP + mongoDB で auto increment


結構めんどくさかったので備忘録。

ユニークなIDだけなら自動生成される “_id”: ObjectId(“xxxxxx”) でもいいんですが、連番使いたい場面がどうしてもあるので。

まず連番用の collection を作ります。
(php 上でやってもいいけど、毎度データの有無判定はよくないかも)

# collection名は seq と仮定
# 連番を使いたい collection を test と仮定
db.seq.insert({"_id": "test", "autoID": 1});

# 数値を NumberLong型にしてるならこう
db.seq.insert({"_id": "test", "autoID": NumberLong("1")});

model で 連番を取得する関数を作ります。

public static function getIncrementNumber($collection){

        $mongo = \Mongo_Db::instance()

        $command = array(
                'findAndModify' => 'seq',
                'query' => array('_id' => $collection),
                'update' => array('$inc' => array(
                        'autoID' => 1
                )),
                'new' => true
        );

        $incID = $mongo->command($command);
        return $incID['value']['autoID'];
}

あとは document を insert するときに↑の関数を呼ぶだけ

$collection = 'test';

$document = array(
    'id'   => self::getIncrementNumber($collection),
    'name' => '山田太郎',
    'age'  => 20,
);

$mongo = \Mongo_Db::instance();
$mongo->insert("test", $document);

3 Responses to FuelPHP + mongoDB で auto increment

  1. 增达信购 より:

    博文值得拜读。受益了!

  2. RobrstLap より:

    generic trazodone 20mg uk trazodone online nederland trazodone 20mg preis cf trazodone generique 5 mg acheter trazodone meilleur pri canada discount drugs trazodone brand trazodone nl dosagem ideal trazodone link for you trazodone price trazodone italia gratis trazodone 20mg preis cf il trazodone quanto costa acheter trazodone meilleur pri try it no rx trazodone purchase once a day trazodone

    maximum dose trazodone for sleep http://personalsolutionsnorthwest.com/# sexual side effectstrazodone 50 mg for sleep http://personalsolutionsnorthwest.com/#

  3. Josephsoype より:

    По поводу аренду писать сюда

    —–

    аренда торгового помещения

コメントを残す

メールアドレスが公開されることはありません。

Top