【问题标题】:mongo "$and" operator for subcollection用于子集合的 mongo "$and" 运算符
【发布时间】:2019-08-27 18:29:26
【问题描述】:
  {
   "movies":[
      {
         "moviename":"Avengers",
         "characters":[
            "Hulk",
            "Iron man"
         ]
      },
      {
         "moviename":"Justice League",
         "characters":[
            "Super man",
            "Wonder Woman"
         ]
      }
   ]
}

我想根据 Moviename 和 Characters 的查询来获取 Document,它们都应该像 Moviename ="Avengers" 和 charactername="Hulk" 一样匹配,然后它应该返回值。如果我通过 Moviename="Avengers" 和 charactername="Super man" 那么它不应该返回任何东西 我写了一个查询,它基本上像 or 而不是 and {"$and" : [{"movies.moviename" : { "$in" : ["Avenger"] },"movies.characters" :{"$in":["Super man"]}}]} 这个查询不应该返回任何东西,但它会返回两个文档。 它分别匹配我的电影名称和角色,而不是在同一个对象上。

【问题讨论】:

    标签: mongodb mongodb-query spring-data


    【解决方案1】:
    { "movies" : { "$elemMatch" : {"moviename" :"Avengers" , "characters":{"$in":["Hulk"]}}}}
    

    好的,经过少许阅读找到了解决方案。$elemMatch 解决了这个问题。更多阅读在这里 https://docs.mongodb.com/manual/reference/operator/query/elemMatch/#op._S_elemMatch

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 我正在使用 Spring data Criteria 将检查那里的条件是否可行
      猜你喜欢
      • 1970-01-01
      • 2017-04-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-09
      • 2020-12-17
      • 2023-04-09
      • 1970-01-01
      相关资源
      最近更新 更多