Mongodb Mongo唯一索引不区分大小写

Mongodb Mongo唯一索引不区分大小写,mongodb,spring-data-mongodb,mongodb-indexes,Mongodb,Spring Data Mongodb,Mongodb Indexes,是否可以创建不区分大小写的索引?现在它正从NAME区别到NAME。保存第二个字段小写(或大写)对我来说是不可能的 谢谢, Pedro是的,它现在在MongoDB 3.4中提供了新的排序功能 您可以创建不区分大小写的索引,如下所示: @CompoundIndexes({ @CompoundIndex(name = "fertilizer_idx", unique = true, def = "{'name': 1, 'formula': 1, 'type':

是否可以创建不区分大小写的索引?现在它正从
NAME
区别到
NAME
。保存第二个字段小写(或大写)对我来说是不可能的

谢谢,
Pedro

是的,它现在在MongoDB 3.4中提供了新的排序功能

您可以创建不区分大小写的索引,如下所示:

@CompoundIndexes({
    @CompoundIndex(name = "fertilizer_idx",
        unique = true,
        def = "{'name': 1, 'formula': 1, 'type': 1}")
})
public class Fertilizer extends Element implements Serializable {
//class stuff
}
其中,“强度”属性是比较级别

然后,您可以使用此查询获得不区分大小写的匹配:

db.collection.createIndex({
   name:1,
   formula:1,
   type:1
},
{
   collation:{
      locale:"en",
      strength:2
   }
});
有关详细信息,请参阅

如果您从以前的版本升级到mongodb 3.4,您可能需要在创建这样的索引之前设置兼容性

db.collection.find({name: "name"}).collation({locale: "en", strength: 2});
将排序规则用作db.collection.createIndex()的选项

更多信息请点击此处:

此处提供区域设置/语言信息:

强度:整数

可选。要执行的比较级别。可能的值为:

1:初级比较。排序规则只执行基本字符的比较,而忽略其他差异,如变音符号和大小写

2:二级比较。排序规则执行到次要差异(如变音符号)的比较。也就是说,排序规则执行基本字符(主要差异)和变音符号(次要差异)的比较。基本字符之间的差异优先于次要差异

3:三级比较。排序规则执行最多三级差异的比较,例如大小写和字母变体。也就是说,排序规则执行基本字符(主要差异)、变音符号(次要差异)以及大小写和变体(三级差异)的比较。基本字符之间的差异优先于次要差异,次要差异优先于第三级差异。 这是默认级别

4:四级。限于特定用例,当水平1-3忽略标点符号或处理日语文本时,要考虑标点符号。 5:相同级别。仅限于连接断路器的特定使用情况

Mongo3.4具有排序规则,允许用户为字符串比较指定特定于语言的规则

排序规则包括:

db.collection.createIndex(
{ name: 1, formula: 1, type: 1 },
{ name: "fertilizer_idx", unique: true, collation:{ locale: "en", strength: 2 } }
)
排序规则:{
地点:,
案件级别:,
案例一:,
强度:,
数字排序:,
候补:,
maxVariable:,
向后的:
}

MongoDB 3.4版之前我们无法创建不区分大小写的索引

在版本3.4中,有
排序规则
选项,允许用户为字符串比较指定特定于语言的规则,例如字母大小写和重音符号规则

排序规则选项具有以下语法:

collation: {
   locale: <string>,
   caseLevel: <boolean>,
   caseFirst: <string>,
   strength: <int>,
   numericOrdering: <boolean>,
   alternate: <string>,
   maxVariable: <string>,
   backwards: <boolean>
}

N.B
排序规则
选项不适用于文本索引。

如上所述,Shaishab Roy
您应该使用collation.strength

无法用spring数据的注释来定义它

但是您可以手动执行它。要在spring应用程序中实现此行为,您应该创建事件侦听器来侦听应用程序是否准备就绪,注入MongoOperations bean并定义索引,如下例所示:

db.collectionName.createIndex(
  { name: 1, formula: 1, type: 1 },
  { 
    name: "fertilizer_idx",
    collation: {locale: "en", strength: 2},
    unique: true
  }
)

SpringDataMongo2.2通过@Document和@Query提供了“基于注释的排序支持”

参考文献

当应用程序启动时,它将为每个文档创建索引以及相应的排序规则


到目前为止,您有没有收到任何信息?注意:从DocDB的3.6.0版开始,Amazon DocumentDB不支持此功能,因为不支持排序规则光标。看见
collation: {
   locale: <string>,
   caseLevel: <boolean>,
   caseFirst: <string>,
   strength: <int>,
   numericOrdering: <boolean>,
   alternate: <string>,
   maxVariable: <string>,
   backwards: <boolean>
}
db.collectionName.createIndex(
  { name: 1, formula: 1, type: 1 },
  { 
    name: "fertilizer_idx",
    collation: {locale: "en", strength: 2},
    unique: true
  }
)
@Configuration
public class MongoConfig {
  @Autowired
  private MongoOperations mongoOperations;

  @EventListener(ApplicationReadyEvent.class)
  public void initMongo() {
    mongoOperations
    .indexOps(YourCollectionClass.class)
    .ensureIndex(
        new Index()
            .on("indexing_field_name", Sort.Direction.ASC)
            .unique()
            .collation(Collation.of("en").strength(2)));
  }
}
@Document(collection = 'fertilizer', collation = "{'locale':'en', 'strength':2}")
public class Fertilizer extends Element implements Serializable {

    @Indexed(unique = true)
    private String name;
    //class stuff
}