11

Javaドライバーを介してMongoDB上AgeおよびMongoDB内に複合インデックスを作成したいのですが、私の構文は次のとおりです。Name

coll.ensureIndex(new BasicDBObject("Age", 1),new BasicDBObject("Name", -1));
List <DBObject> list = coll.getIndexInfo();

  for (DBObject o : list) {
       System.out.println(o);
    }

しかし、複合インデックスではなく1つのインデックスのみを作成し、結果を次のようにします:

{ "v" : 1 , "key" : { "_id" : 1} ,"ns" :"EmployeeData.EmpPersonalData", "name":"_id_"}
{ "v" : 1 , "key" : { "Age" : 1} , "ns" : "EmployeeData.EmpPersonalData" , "name" : "Age_1" , "Name" : -1}

では、コレクションの複合インデックスを Java ドライバーを介して作成するにはどうすればよいでしょうか?

4

3 に答える 3

27

コードを見ると、実際にはensureIndex2 つのパラメーターで呼び出しています。最初のパラメーターはキーで、2 番目のパラメーターは追加のフィールドになりました: Name: -1.

最初のパラメーターで渡そうとしているのは、このオブジェクト{"Age":1, "Name":-1}です。あなたが実際に合格したのは{"Age":1}, {"Name":-1}.

だからあなたはこのようなことをしたい:

BasicDBObject obj = new BasicDBObject();
obj.put("Age", 1);
obj.put("Name", -1);
coll.ensureIndex(obj);

インデックスはデフォルト名で作成されることに注意してください。特定の名前を指定するには、次の手順を実行します。

coll.ensureIndex(obj, "MyName");
于 2012-07-15T04:16:49.967 に答える
5

公式ドキュメントに従ってこれを試すことができます。

import org.bson.Document;
db.getCollection("restaurants").createIndex(new Document("cuisine", 1).append("address.zipcode", -1));

公式の Mongo DB ドライバー Java ドキュメント

于 2015-08-27T09:46:58.800 に答える