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

Javaを使用したmongodbの自動インクリメントシーケンス

    最初に自動インクリメントシーケンスフィールドの作成を使用して、mongoDBシェルを使用してコレクションを作成する必要があり、コレクションは次のようになります:

    db.counters.insert(
    {
      _id: "userid",
      seq: 0
    })
    

    したがって、counters _id,seqのようなフィールドを含むコレクション 、getNextSequenceを作成します Javaの関数と、パラメータuseridを持つこの関数 文字列としてgetNextSequence このように機能します:

    public static Object getNextSequence(String name) throws Exception{
        MongoClient mongoClient = new MongoClient( "localhost" , 27017 );
        // Now connect to your databases
        DB db = mongoClient.getDB("demo");
        DBCollection collection = db.getCollection("counters");
        BasicDBObject find = new BasicDBObject();
        find.put("_id", name);
        BasicDBObject update = new BasicDBObject();
        update.put("$inc", new BasicDBObject("seq", 1));
        DBObject obj =  collection.findAndModify(find, update);
        return obj.get("seq");
    

    }

    上記の関数はseqを返します mainでこの関数をカウントして使用しました 次のような方法:

    public static void main(String[] args) throws Exception {
    
        MongoClient mongoClient = new MongoClient( "localhost" , 27017 );
        // Now connect to your databases
        DB db = mongoClient.getDB("demo");
        DBCollection collection = db.getCollection("counters");
        BasicDBObject document = new BasicDBObject();
    
        document.put("_id", getNextSequence("userid"));
        document.put("name","Sarah C.");
        collection.insert(document); // insert first doc
    
        document.put("_id", getNextSequence("userid"));
        document.put("name", "Bob D.");
        collection.insert(document); // insert second doc
    }
    

    counters コレクションには、nameを含む3つのドキュメントが含まれています Sarah C. and Bob D.として それぞれ、最初に手動で挿入した1つのデフォルトのドキュメントで、seqがインクリメントされます。 このように{ "_id" : "userid", "seq" : 2 }



    1. MongoDB findOneAndDelete()

    2. ペルコナライブフランクフルト2018-イベントのまとめとセッション

    3. Redis Clusterを使用すると、ハッシュタグをevalに渡すだけで済みますか?

    4. 数値が範囲内にあるかどうかを判断するためのRedisまたはMongo?