我可以使用mongoose通过多个参数查询子文档数组吗?

时间:2014-10-07 15:44:29

标签: mongodb mongoose

我正在尝试使用服务类型和帐户ID通过社交服务查找用户,但我不知道如何将其作为Mongoose查询。

例如,如果我有'twitter'和'789DEF',我如何使用Mongoose找到这个用户?

{
"email":"me@domain.com",
"social": [
        {
            "service": "linkedin",
            "username": "Test User",
            "url": "https://www.linkedin.com/in/testuser",
            "accountId": "ABC12356"
        },
        {
            "service": "twitter",
            "username": "TestUser",
            "url": "https://www.twitter.com/testuser",
            "accountId": "789DEF"
        }
    ]
}

1 个答案:

答案 0 :(得分:2)

您需要$elemMatch查询运算符。假设你已经宣布了一个猫鼬模型(假设Users),那么这样的事情应该有效:

Users.findOne({
    social: {
        $elemMatch: {
            service: 'twitter',
            accountId: '789DEF'
        }
    }
}, function (err, doc) {
    // doc contains your user document
});

如果您需要的只是相关的social子文档,那么您还应该使用$投影运算符:

Users.findOne({
    social: {
        $elemMatch: {
            service: 'twitter',
            accountId: '789DEF'
        }
    }
}).select('social.$').exec(function (err, doc) {
    // ...
});