Get particular element from mongoDB array with $text search

Viewed 585

I have multilingual data in MongoDB with format like

{
    "_id" : ObjectId("56ebd619e07925a2286c1c3c"),
    "translation" : [ 
        {
            "language" : "english",
            "name" : "shahid Afridi",
            "desc" : "batsmen",
            "player" : "capten"
        }, 
        {
            "language" : "spanish",
            "name" : "shhid Ofridi",
            "desc" : "batsmeen",
            "player" : "capteen"
        }, 
        {
            "language" : "french",
            "name" : "hhid afrede is best",
            "desc" : "batsmin",
            "player" : "captn"
        }
    ]
}

suppose is a Spanish user comes then my query is

db.getCollection('t.m').find({$text: { $search: "best",$language: "es", }})

the problem is it search in whole translation array (not in french) i also tried that is only search and return only specific language document in array i also tried based on other SO question but no luck i.e

db.getCollection('t.m').find({$text: { $search: "capten",$language: "es", },translation: {$elemMatch: {language: "english"}}})

my question has to parts

  • query only one language in translation i.e search performed only in spanish or english
  • and after query return only specific object from translation array not whole translation array

remember i create text indexes for name, desc and player. any help will be greatly appreciated.

1 Answers
Related