Монго "$ and" оператор для коллекции - PullRequest
2 голосов
/ 05 апреля 2019
  {
   "movies":[
      {
         "moviename":"Avengers",
         "characters":[
            "Hulk",
            "Iron man"
         ]
      },
      {
         "moviename":"Justice League",
         "characters":[
            "Super man",
            "Wonder Woman"
         ]
      }
   ]
}

Я хочу получить документ, основанный на запросе Moviename, и символы должны совпадать, например, Moviename = "Avengers" и charactertername = "Hulk", тогда он должен вернуть значение.если я передам Moviename = "Avengers" и charactertername = "Super man", то он не должен ничего возвращать. Я написал запрос, который в основном работает как или вместо и {"$and" : [{"movies.moviename" : { "$in" : ["Avenger"] },"movies.characters" :{"$in":["Super man"]}}]} Этот запрос не должен ничего возвращать, но он возвращает обадокументы.Он совпадает с моим именем и персонажами отдельно, но не на одном и том же объекте.

Ответы [ 2 ]

1 голос
/ 06 апреля 2019
{ "movies" : { "$elemMatch" : {"moviename" :"Avengers" , "characters":{"$in":["Hulk"]}}}}

Хорошо, после небольшого чтения нашел решение. $ ElemMatch решает эту проблему.читать дальше https://docs.mongodb.com/manual/reference/operator/query/elemMatch/#op._S_elemMatch

1 голос
/ 05 апреля 2019

Там может быть более простой способ сделать это, но вы можете попробовать $ где.Это принимает функцию JS, где у вас есть доступ к структуре документа, и вы можете вручную перебирать массивы в документе и возвращать true для тех, которые удовлетворяют вашему критерию.Обратите внимание, что эти типы запросов могут быть медленными, если ваша коллекция большая.Вот ссылка на документацию: https://docs.mongodb.com/manual/reference/operator/query/where/

...