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

Javaの自動インクリメントフィールドを使用してmongodbにドキュメントを挿入します

    自動インクリメントシーケンスフィールドの作成<のドキュメントに従います。 / a> 、JavaMongoDBドライバー を使用してJavaで使用できるように調整します。 。

    実装例:

    import java.net.UnknownHostException;
    import com.mongodb.BasicDBObject;
    import com.mongodb.DB;
    import com.mongodb.DBCollection;
    import com.mongodb.DBObject;
    import com.mongodb.MongoClient;
    
    public class TestAutoIncrement {
    
    private final static String DB_NAME = "MyTestDB";
    private final static String TEST_COLLECTION = "testCollection";
    private final static String COUNTERS_COLLECTION = "countersCollection";
    
    public static DBCollection testCollection;
    public static DBCollection countersCollection;
    
    public static void main(String[] args) {
    
        try {
            MongoClient mongoClient = new MongoClient();
            DB database = mongoClient.getDB(DB_NAME);
            testCollection = database.getCollection(TEST_COLLECTION);
            countersCollection = database.getCollection(COUNTERS_COLLECTION);
        } catch (UnknownHostException e) {
            e.printStackTrace();
        }
    
        if (countersCollection.count() == 0) {
            createCountersCollection();
        }
    
        createTestCollection();
    }
    
    public static void createCountersCollection() {
    
        BasicDBObject document = new BasicDBObject();
        document.append("_id", "userid");
        document.append("seq", 0);
        countersCollection.insert(document);
    }
    
    public static Object getNextSequence(String name) {
    
        BasicDBObject searchQuery = new BasicDBObject("_id", name);
        BasicDBObject increase = new BasicDBObject("seq", 1);
        BasicDBObject updateQuery = new BasicDBObject("$inc", increase);
        DBObject result = countersCollection.findAndModify(searchQuery, null, null,
                false, updateQuery, true, false);
    
        return result.get("seq");
    }
    
    public static void createTestCollection() {
    
        BasicDBObject document = new BasicDBObject();
        document.append("_id", getNextSequence("userid"));
        document.append("name", "Sarah");
        testCollection.insert(document);
    
        document = new BasicDBObject();
        document.append("_id", getNextSequence("userid"));
        document.append("name", "Bob");
        testCollection.insert(document);
    
        document = new BasicDBObject();
        document.append("_id", getNextSequence("userid"));
        document.append("name", "Alex");
        testCollection.insert(document);
      }
    
    }
    

    findAndModifyには特別な注意を払う必要があります 方法 。 Java MongoDBドライバー(2.12.4)では、このメソッドは4つの異なる署名で使用できます。
    queryを渡すことができる署名を使用する必要があります。 オブジェクト、update オブジェクトとreturnNew ブール値(trueに設定する必要があります )。

    これは、ドキュメント によると :
    デフォルトでは、返されるドキュメントには、更新時に行われた変更は含まれていません。更新時に変更が加えられたドキュメントを返すには、新しいオプションを使用します。

    更新時に変更を加えたドキュメントを返却する必要があります。



    1. MongoDB C#プロパティ値を含むオブジェクトのクエリ配列

    2. Mongo集約ネスト配列

    3. WaterlineとSails.js(バージョン0.10)を使用してmongoデータベースから個別の値を抽出するにはどうすればよいですか?

    4. MongoDBで1970年より前の日付を処理する方法