Mongodb Mongoose-查询Mongo对象数组,匹配搜索数组中的任何对象
我有一个Mongo模式,其中包含两个对象数组,如下所示:Mongodb Mongoose-查询Mongo对象数组,匹配搜索数组中的任何对象,mongodb,mongoose,Mongodb,Mongoose,我有一个Mongo模式,其中包含两个对象数组,如下所示: genre: {Type: [Object]}, type: {Type: [Object]} Example Document Data: genre: [ {name: "scifi", selected: true}, {name: "fantasy", selected: false, {name: "western", selected: true}, ], type: [ {name: "module", selecte
genre: {Type: [Object]},
type: {Type: [Object]}
Example Document Data:
genre: [
{name: "scifi", selected: true},
{name: "fantasy", selected: false,
{name: "western", selected: true},
],
type: [
{name: "module", selected: true},
{name: "rulebook", selected: true},
{name: "artwork", selected: false},
]
我如何执行一个查询,该查询接收一系列类型/类型并返回任何匹配的文档
findGenres = [
{name: "scifi", selected: true},
{name: "western", selected: true},
]
findTypes = [
{name: "rulebook", selected: true}
]
所以当我搜索时,它只会返回标有Scfi或western的规则书 为了更好地解释,让我们把这个查询切成两半 第1部分(已编辑) 要检查
流派
中单个对象的名称和选定项,可以使用此查询查找数组中的单个项:
model.find('genre':{“$elemMatch”:{name:“scfi”,selected:true}})
对于类型
第二部分
由于要搜索的值不同,您可以在中使用$查找不同值的所有匹配项
model.find({
"$or": [
{'genre': {"$elemMatch": {name: "scifi", selected: true} }},
{'type': {"$elemMatch": {name: "rulebook", selected: true} }}
]
)}
第三部分
现在,您需要做的就是将findGenres
和findTypes
映射到第1部分中的同一个数组中,然后放入第2部分,就完成了
希望有帮助;) 为了更好地解释,让我们把这个查询切成两半
第1部分(已编辑)
要检查流派
中单个对象的名称和选定项,可以使用此查询查找数组中的单个项:
model.find('genre':{“$elemMatch”:{name:“scfi”,selected:true}})
对于类型
第二部分
由于要搜索的值不同,您可以在
中使用$查找不同值的所有匹配项
model.find({
"$or": [
{'genre': {"$elemMatch": {name: "scifi", selected: true} }},
{'type': {"$elemMatch": {name: "rulebook", selected: true} }}
]
)}
第三部分
现在,您需要做的就是将findGenres
和findTypes
映射到第1部分中的同一个数组中,然后放入第2部分,就完成了
希望有帮助;) 在第1部分中,您是否需要像这样使用$elemMatch
:类型:{$elemMatch:{name:{scfi],selected:true}}
否则,查询将与数组中至少有一个元素的名称
为“scfi”的任何文档匹配以及至少一个元素,其中所选的属性为true
。(这里我关心的不一定是同一个元素)。因此,您希望结果中的name
和selected
都与您的查询匹配,对吗?我不是问这个问题的同一个Alex,但我假设Alex想这样做,是的。在第1部分中,您不需要像这样使用$elemMatch
类型:{$elemMatch:{name:{scfi],selected:true}}
否则,查询将与数组中至少有一个元素的任何文档匹配,其中名称
为“scfi”以及至少一个元素,其中所选的属性为true
。(这里我关心的不一定是同一个元素)。因此,您希望结果中的name
和selected
都与您的查询匹配,对吗?我不是问这个问题的同一个Alex,但我想Alex想这样做,是的。