如果对象中的属性存在,我如何检查MongoDB查询?

时间:2017-04-28 07:39:53

标签: mongodb

我正在为MongoDB Collection构建一个简单的查询。该模型如下所示:

{
    a: [],
    user: {
        email: String,
        name: String,
        surname: String
    }
}

我需要从查询中获得的所有文档都有'a'作为非空数组和'user.email'集。我的疑问是:

Document.find({
        a: {
            $exists: true,
            $not: {
                $size: 0
            }
        },
        user: {
            $exists: true,
            'email': {
                $exists: true
            }
        }
    })

问题是当我执行查询时,我的服务器返回500错误说:

{
    "error": {
        "name": "MongoError",
        "message": "unknown operator: email",
        "waitedMS": 0,
        "ok": 0,
        "errmsg": "unknown operator: email",
        "code": 2
    }
}

我哪里错了?谁能帮我这个? 谢谢!

1 个答案:

答案 0 :(得分:0)

由于您构建查询的方式,MongoDB引擎尝试将email关键字解析为user字段上的运算符。

如果要检查文档是否定义了嵌套属性,可以使用点表示法:

Document.find({
        a: {
            $exists: true,
            $not: {
                $size: 0
            }
        },
        "user.email": {
            $exists: true
        }
    })