【问题标题】:How to create a compound index in MongoDB through Java driver?如何通过 Java 驱动在 MongoDB 中创建复合索引?
【发布时间】:2012-07-14 09:03:40
【问题描述】:

我想通过 Java 驱动程序在 MongoDB 中的 AgeName 上创建复合索引,这是我的语法:

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驱动创建comund index on collection呢?

【问题讨论】:

    标签: java mongodb indexing mongodb-java


    【解决方案1】:

    如果您查看您的代码,您实际上使用两个参数调用了ensureIndex。你的第一个参数是键,你的第二个参数变成了一些额外的字段: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");
    

    【讨论】:

    • 在 Stackoverflow 中,如果您将答案标记为正确和/或投票,我会获得积分。它还告诉其他人这是正确的答案。你能做到吗?
    • 为什么不@Gates!对不起,我以前一定做过,但我是这个网站的新手 :)
    【解决方案2】:

    你可以根据官方文档试试这个。

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

    Official Mongo DB Driver Java documentation

    【讨论】:

      【解决方案3】:

      一种更现代、或许更流畅的方法可能是:

      import com.mongodb.client.model.Indexes;
      
      collection
          .createIndex(
              Indexes.compoundIndex(
                  Indexes.ascending("Age"),
                  Indexes.descending("Name")
              )
          );
      

      发现于the manual。为清晰起见格式化;根据自己的喜好后期格式。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-04-17
        • 2013-07-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-12-17
        • 1970-01-01
        相关资源
        最近更新 更多