(猫鼬)如何在用户集合中搜索会话数组属性内的对象内的令牌

Posted

技术标签:

【中文标题】(猫鼬)如何在用户集合中搜索会话数组属性内的对象内的令牌【英文标题】:(Mongoose) How to search Users collection for a token that is inside an object inside the sessions array property 【发布时间】:2020-11-08 04:15:50 【问题描述】:

这是我的 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/

【讨论】:

以上是关于(猫鼬)如何在用户集合中搜索会话数组属性内的对象内的令牌的主要内容,如果未能解决你的问题,请参考以下文章

如何在猫鼬模型内的数组中查找对象?

如何更新猫鼬模式中另一个数组内的数组内的对象?

如何通过猫鼬(javascript)中的多个值查询数组内的对象?

将值推送到猫鼬模式中对象内的数组

使用投影或选择更新猫鼬文档中对象数组内的对象

如何在 Mongoose 中更改文档子数组的对象内的布尔值?