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, nulldonc 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, uidest dedans session.user! J'espère que cela aide.

Articles connexes


Requête dynamodb pour un champ spécifique

Le morse comment interroger dynamodb pour tous les éléments qui correspondent à une règle spécifique? Je construis une boutique en ligne (comme Asos) et dans dynamodb j'ai une table de produits. tous les produits ont le champ «catégorie». donc je veux juste fa