¿Cómo hacer búsqueda de texto completo en el campo anidado en MongoDB?

Carmine:

Debo guardar la localización en MongoDB de la siguiente manera

db.user.insertMany([
    {
        "name": {
            "en": "Frodo Baggins",
            "ru": "Фродо Беггинс"
        }
    },
    {
        "name": {
            "en": "Bilbo Baggins",
            "ru": "Бильбо Беггинс"
        }
    }
])

Yo sé que puedo aplicar un índice de búsqueda de texto completo en todos los campos con este

db.user.ensureIndex({ "$**": "text" })

pero mi documento tiene mucha más información que yo no quiero índice. ¿Hay alguna manera de especificar el índice de sólo el contenido del campo de nombre?

SuleymanSah:

Puede crear un índice compuesto sobre name.en y name.ru:

db.user.createIndex(
   {
     "name.en": "text",
     "name.ru": "text"
   }
 )

Y utilizar esta consulta para buscar:

db.user.find( { $text: { $search: "Baggins" } }) 

Incluso se puede añadir un valor de puntuación, y para ordenar:

db.user
  .find({ $text: { $search: "Baggins" } }, { score: { $meta: "textScore" } })
  .sort({ score: { $meta: "textScore" } });

Esto le dará un resultado como este:

{
    "_id" : ObjectId("5e8237b3c3ff893c44edd74e"),
    "name" : {
        "en" : "Frodo Baggins",
        "ru" : "Фродо Беггинс"
    },
    "score" : 1.5
},
{
    "_id" : ObjectId("5e8237b3c3ff893c44edd74f"),
    "name" : {
        "en" : "Bilbo Baggins",
        "ru" : "Бильбо Беггинс"
    },
    "score" : 0.75
}

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=369310&siteId=1
Recomendado
Clasificación