MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

MongoDB diacriticInSensitive търсене не показва всички редове с ударение (думи с диакритичен знак), както се очаква и обратно

Отmongodb 3.2 , текстови индекси са нечувствителни към диакритика:

С версия 3 текстовият индекс не е чувствителен към диакритика. Тоест, индексът не прави разлика между знаци, които съдържат диакритични знаци и техния немаркиран двойник, като é, ê и e. По-конкретно, текстовият индекс премахва символите, категоризирани като диакритични в Unicode 8.0 Character Database Prop List.

Така че следната заявка трябва да работи:

db.Collection.find( { $text: { $search: "iphone"} } );
db.Collection.find( { name: { $regex: "iphone"} } );

но изглежда, че има грешка с диереза ​​( ¨ ), дори ако е категоризирана като диакрит в списъка на unicode 8.0 (проблем на JIRA:SERVER-29918 )

Решение

отmongodb 3.4 можете да използвате съпоставяне, което ви позволява да изпълнявате този вид заявка:

например, за да получите очаквания резултат, изпълнете следната заявка:

db.Collection.find({name: "iphone"}).collation({locale: "en", strength: 1})

това ще изведе:

{ "_id" : 1, "name" : "iphone" }
{ "_id" : 2, "name" : "iphône" }
{ "_id" : 3, "name" : "iphonë" }
{ "_id" : 4, "name" : "iphônë" }

в съпоставянето, strength е нивото на сравнение за изпълнение

  • 1 :само основен знак
  • 2 :чувствителен към диакритичен знак
  • 3 :чувствителен към главни букви + чувствителен към диакрит



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. runCommand еквивалент за nodejs-native-mongodb

  2. Една публикация крие вложени полета от друга публикация

  3. Може ли рамката за агрегиране на MongoDB $group да върне масив от стойности?

  4. Мога ли да определя дали даден низ е MongoDB ObjectID?

  5. MongoDB $ конвертиране