即使数据不匹配

时间:2018-01-10 21:45:26

标签: mongodb mongoose mongoose-schema

假设我的用户在数据库中只有很少的令牌。其中一个令牌可以访问:'unauth',其他令牌:db中的'auth'。我试图通过其中一个令牌访问,我正在使用的令牌......在db中可以访问为'unauth'。理想情况下,不应使用该特定令牌检索用户信息。为什么User.findOne()仍然得到解决?

用户快照

{
"_id" : ObjectId("5a56798ebf68677d469c8226"),
"updatedAt" : ISODate("2018-01-10T20:43:30.895Z"),
"createdAt" : ISODate("2018-01-10T20:37:34.081Z"),
"email" : "test@testing.com",
"password" : "somepwd",
"tokens" : [ 
    {
        "access" : "unauth",
        "token" : "dfdgdgfgdfgdfgdfgfdgfddfg",
        "_id" : ObjectId("5a56798ebf68677d469c8227")
    }, 
    {
        "access" : "auth",
        "token" : "gjhjjjhhhjhhjjhjhjhjjjjjjjjjghfgh",
        "_id" : ObjectId("5a567a0ebf68677d469c8229")
    }
],
"__v" : 4
}


User.findOne({
 '_id': '5a56798ebf68677d469c8226',
 'tokens.access': 'auth',
 'tokens.token': 'dfdgdgfgdfgdfgdfgfdgfddfg'
})

1 个答案:

答案 0 :(得分:0)

显然我设法做到了......,它显示结果的原因是因为Mongodb发现每个元素都包含数组中的任何属性。对于任何偶然发现它的人...如在docs中引用搜索嵌套数组元素的语法是=> (“arrayName”:{$ elemMatch:{“key1”:“value1”,“key2”:“value2”},“key”:“value”});