提问者:小点点

(Mongoose)如何在用户集合中搜索sessions数组属性中的对象内的令牌


下面是我的user.model.js文件:

const mongoose = require('mongoose');
const jwt = require('jsonwebtoken');
const crypto = require('crypto');

const UserSchema = new mongoose.Schema({
    username: {
        required: true,
        type: String,
        minlength: 4,
        maxlength: 128,
        trim: true
    },
    displayname: {
        required: true,
        type: String,
        minlength: 4,
        maxlength: 128,
        trim: true
    },
    email: {
        required: true,
        type: String,
        minlength: 8,
        maxlength: 256,
    },
    password: {
        required: true,
        type: String,
        minlength: 8
    },
    sessions: [
        {
            token: {
                type: String,
                required: true
            },
            expiresAt: {
                type: Number,
                required: true
            }
        }
    ]
});

// Some irrelevant functions

const User = mongoose.model('User', UserSchema);

module.exports = User;

所以我想做的是只使用会话令牌来查找用户,但这有点困难,因为每个用户的会话数组中可能有多个对象,我想搜索所有这些对象。


共1个答案

匿名用户

可以这样查询

const user = await User.findOne({"sessions.token": session_token})     

const user = await User.findOne({sessions: {$elemMatch: { token: session_token }}})
            

有关更多信息,您可以参考文档。

https://docs.mongodb.com/manual/tutorial/query-array-of-documents/