2017-09-30 14 views
0

mongo DBを使用して 'Project_ID'を自動インクリメントしたいと思います。 'project_ID'の値を 'demo_1'にする必要があるので、この値を自動増分しようとするとこの値を使用し、エラーを表示します。非数値のIDを増やせません。mongo dbの非数値型IDの自動インクリメント方法

public static Object getNextSequence(String Project_ID) throws Exception{ 
      // MongoClient mongoClient = new MongoClient("localhost" , 27017); 
      // Now connect to your databases 
      // DB db = mongoClient.getDB("demo"); 
      DB db=ConnectToDB.getConnection(); 
       Properties prop = new Properties(); 
       InputStream input = null; 
       input = Demo.class.getClassLoader().getResourceAsStream("config.properties"); 
       prop.load(input); 
       String col=prop.getProperty("COLLECTION_DEMO"); 
      DBCollection collection = db.getCollection("counters"); 
      BasicDBObject find = new BasicDBObject(); 
      find.put("_id", Project_ID); 
      BasicDBObject update = new BasicDBObject(); 
      update.put("$inc", new BasicDBObject("seq", 1)); 
      DBObject obj = collection.findAndModify(find, update); 
      db.getMongo().close(); 
      return obj.get("seq"); 
     } 
Please let me know what is the issue there or what is the possible way to achieve this. Thanks. 

答えて

1

自動インクリメントしようとしている内容がコードと一致しないため、エラーに気付かないでください。あなたはコードがseqのProject_ID(この場合はdemo_1)でキーイングされたドキュメントにオートインクリメントしようとしています。 エラーは発生しませんでしたが、コードを実行しました。findAndModify()に "シード"レコードがない可能性があります。これを実行してシードを作成してみてください:

db.counters.drop(); 
db.counters.insert({_id: "demo_1", seq: NumberInt("0")}); 

コードを実行してください。 また、getNextSequenceを呼び出すたびに接続して接続を終了しています。それは本当に遅いでしょう。 DBを開き、コレクションをmain()に入れて終了することをお勧めします。

関連する問題