节点-Mongo DB-如何查询特定的嵌套字段

时间:2019-12-11 07:08:17

标签: node.js mongodb mongodb-query

简而言之:我使用mongodb为我的node-express应用设置了会话身份验证。如果用户在数据库中已经具有有效的会话实体,则不应创建新的会话。现在,我要查询会话集合中的特定用户ID。

收藏

该集合如下所示:

{"_id":"HbAE-qMXPWl7C8tDUnC****q8OoEf76vN","expires":{"$date":{"$numberLong":"1576133617190"}},"session":"{\"cookie\":{\"originalMaxAge\":86399999,\"expires\":\"2019-12-12T06:36:29.898Z\",\"secure\":false,\"httpOnly\":true,\"path\":\"/\",\"sameSite\":true},\"user\":{\"uid\":\"5df08a1b8a60c174840d2986\"}}"}

我的查询如下:

public async compareSessionIds(uid: string, sid: string) {
    //uid is: 5df08a1b8a60c174840d2986 ==> the same as in the entity
    const user: User | null = await this.connectionManager.db('users').collection<User>('sessions').findOne({uid: uid} as any);
    console.log('user found: ', user); // user found:  null
    return user && user._id === sid;
}

但是我的查询每次null都会返回,所以我假设我的查询是错误的。如何正确查询mongodb中的特定嵌套字段?

1 个答案:

答案 0 :(得分:1)

您的查询应如下所示:

.findOne({"session.user.uid": uid});

因为uidsession.user中!希望对您有所帮助。