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
}