{
"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"]}}]}
此查询不应返回任何内容,但会返回两个文档。
它分别与我的电影名称和角色匹配,而不是在同一对象上。
答案 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