mongo“ $ and”子集合运算符

时间:2019-04-05 19:43:29

标签: mongodb mongodb-query spring-data

  {
   "movies":[
      {
         "moviename":"Avengers",
         "characters":[
            "Hulk",
            "Iron man"
         ]
      },
      {
         "moviename":"Justice League",
         "characters":[
            "Super man",
            "Wonder Woman"
         ]
      }
   ]
}

我想基于Moviename的查询来获取文档,并且Characters都应该像Moviename =“ Avengers”和charactername =“ Hulk”一样匹配,然后它应该返回值。如果我通过Moviename =“ Avengers”和charactername =“ Super man”,那么它不应返回任何内容 我写了一个查询,基本上可以像或代替和  {"$and" : [{"movies.moviename" : { "$in" : ["Avenger"] },"movies.characters" :{"$in":["Super man"]}}]}此查询不应返回任何内容,但会返回两个文档。  它分别与我的电影名称和角色匹配,而不是在同一对象上。

2 个答案:

答案 0 :(得分:1)

可能有更简单的方法来执行此操作,但是您可能想尝试$ where。它接受一个JS函数,您可以在其中访问文档结构,并且可以手动遍历文档中的数组,并为满足您的条件的对象返回true。但是请注意,如果您的集合很大,这些类型的查询可能会很慢。这是其文档的链接:https://docs.mongodb.com/manual/reference/operator/query/where/

答案 1 :(得分:1)

{ "movies" : { "$elemMatch" : {"moviename" :"Avengers" , "characters":{"$in":["Hulk"]}}}}

稍作阅读后,确定了解决方案。$ elemMatch解决了此问题。在这里阅读更多 https://docs.mongodb.com/manual/reference/operator/query/elemMatch/#op._S_elemMatch