sql >> データベース >  >> NoSQL >> MongoDB

マングースコレクションで自動インクリメント番号を挿入する方法

    MongoDBチュートリアルに従って、 Auto-シーケンスフィールドのインクリメント 、最初に別のcountersを作成する必要があります 使用された最後の数列を追跡するためのコレクション。 _id フィールドにはシーケンス名、つまりuserIDが含まれます ユーザーコレクションのフィールドとseq フィールドには、シーケンスの最後の値が含まれます。

    まず、userIDの初期値をcountersコレクションに挿入します :

    db.counter.insert(
       {
          "_id": "userID",
          "seq": 0
       }
    )
    

    カウンターコレクションにデータを入力したら、Mongooseでスキーマを生成します。

    var counterSchema = mongoose.Schema({
        "_id": { "type": String, "required": true },
        "seq": { "type": Number, "default": 0 }
    });
    
    var counter = mongoose.model('counter', counterSchema);
    

    次に、ユーザースキーマを再定義して、ユーザーモデルを保存するときに、最初にカウンターモデルのfindByIdAndUpdate()を呼び出すようにします。 seq値をアトミックにインクリメントし、この新しい値を返すメソッド。これは、次のuserIDとして使用できます。 値:

    var userSchema = mongoose.Schema({
        "userID": { "type": String, "required": true },
        "firstname": { "type": String },
        "lastname": { "type": String },
        // other properties ...
        }, { "collection": "user" }
    );
    
    userSchema.pre("save", function (next) {
        var doc = this;
        counter.findByIdAndUpdate(
            { "_id": "userID" }, 
            { "$inc": { "seq": 1 } }
        , function(error, counter)   {
            if(error) return next(error);
            doc.userID = counter.seq.toString();
            next();
        });
    });
    


    1. java8LocalDateをmongoDBに保存する

    2. MongoDB接続の.NETベストプラクティス?

    3. phpを使用したMongoDBリモート接続

    4. Redis `SCAN`:一致する可能性のある新しいキー間のバランスを維持し、最終的な結果を妥当な時間で確保するにはどうすればよいですか?