在猫鼬中考虑以下模型:
var specie = mongoose.Schema({
order: String,
family: String,
genus: String,
species: String,
properties: [
{property:String,
value:String}
]
});
我正在尝试构建一个查询,该查询将根据properties数组中的特定值返回文档。
以下是我的查询示例:
var query = {
$and: [
{"properties.property":"number of wings","properties.value":"2"},
{"properties.property":"antenna end","properties.value":"clubbed"}
]
}
我认为这个查询会起作用,但它实际上会返回所有具有“翼数”和“天线结束”属性以及值“4”和值“棒棒”的文档。
我希望查询返回属性数组中包含以下对象的文档:
{property: "number of wings", value: "2"} and
{property: "antenna end", value:"clubbed"}
但是,上述查询还会返回具有以下属性的文档:
{property: "number of legs", value:"2"}
我该如何解决这个问题?
答案 0 :(得分:1)
我相信我找到了自己的答案。 我必须在查询中使用$ elemMatch:
var query = {
$and: [
{properties: {$elemMatch: {property:"number of wings",value:"2"}}},
{properties: {$elemMatch: {"property":"antenna end","value":"clubbed"}}}
]
}
添加资源链接:http://docs.mongodb.org/manual/reference/operator/query/elemMatch/#array-of-embedded-documents
这似乎返回了正确的结果。