用mongoose查询子文档

时间:2015-03-16 16:50:24

标签: mongodb mongoose

在猫鼬中考虑以下模型:

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"} 

我该如何解决这个问题?

1 个答案:

答案 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

这似乎返回了正确的结果。