Node - Mongo DB - Comment faire une requête pour un champ imbriqué spécifique
MarcoLe
En bref: j'ai configuré l'authentification de session pour mon application node-express avec mongodb. Si un utilisateur a déjà une entité de session valide dans la base de données, une nouvelle session ne doit PAS être créée. Maintenant, je veux faire une requête pour l'ID utilisateur spécifique dans ma collection de sessions.
Collection
La collection ressemble à ceci:
{"_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\"}}"}
Et ma requête ressemble à ceci:
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;
}
Mais ma requête revient à chaque fois, null
donc je suppose que ma requête est erronée. Comment puis-je interroger correctement un champ imbriqué spécifique dans mongodb?
Shihab
Votre requête doit ressembler à ceci:
.findOne({"session.user.uid": uid});
Parce que, uid
est dedans session.user
! J'espère que cela aide.