mongodb找到使用多个字段,我怎么知道哪些字段没有统计?

时间:2016-05-04 10:32:44

标签: mongodb

我正在使用mongodb 2.6查找使用多个字段,我怎么知道哪个字段不符合?用户名是不是tally还是courseId不符合mongodb 2.6中的数据?它只返回null

    users.findOne({ 
        "emails.address": username,
        "courseList.courseId": courseId
    }, function (queryErr, item) {
        db.close()

        if (queryErr) {
            return res.json({ "error": true, "message": queryErr })
        } 

        // If email/courseId not exist
        if (item === null) {
            return res.json({ "error": false, "message": "username/courseid is incorrect" })
        }
    })

1 个答案:

答案 0 :(得分:0)

您可以在查询中使用 $or 条件,因为根据情况,查询正在执行隐式AND逻辑,因此MongoDB将查找满足BOTH条件的文档;如果任何表达式评估 如果为false,则MongoDB将返回null,因此您无法从null结果中知道哪个字段是否符合。

在这种情况下, $or 运算符将保证至少一个文档,如果任何一个查询表达式求值为false,那么您可以检查结果中的相等性以确定哪个字段虽然我发现检查哪个字段不合理有点违反直觉但是不正确。

请考虑以下示例来演示此方法。它假设emailscourseList字段是数组:

users.findOne(
    { 
        "$or": [
            { "emails.address": username },
            { "courseList.courseId": courseId }
        ]
    }, function (err, item) {
    var result = { "error": false, "message": "" };
    if (err) {
        result.error = true;
        result.message = err;
    } 
    else if (!item) {
        result.message = "Both username and courseid are incorrect";
    }
    else{
        if (item.emails.map(function (e) { return c.address }).indexOf(username) < 0 ){
            result.message = "username is incorrect";
        }
        else if (item.courseList.map(function (c) { return c.courseId }).indexOf(courseId) < 0 ){
            result.message = "courseId is incorrect";
        }
        else{
            result.message =  item;
        }
    }
    return res.json(result);
});