【问题标题】:Mongo DB find() function not working node jsMongodb find()函数不起作用节点js
【发布时间】:2021-03-21 11:17:54
【问题描述】:
const User = require('./models/user')

module.exports = new class Users {
    async get(token) {
        return await User.find({"activeToken": token}).exec();
    }
}

我的查找功能总是返回“找不到你要找的东西”,我试过 users.activateToken、User.activateToken 和只是 activateToken 还是不行。

{
    "_id": "text",
    "activeToken": "abcdefg",
    "activated": "false",
    "email": "email",
    "__v": 0
}

抛出的错误只是“null”

我试图运行它的功能:

 bot.on('message',  async (message) => {
     
     
    const user =  await users.get(message.content);
    if (message.content == user.activeToken && !user.activated && message.channel.type == 'dm') {
        user.discord_id = message.member.id;
        const role = message.guild.roles.cache.get(config.member_role);
        console.log("Test");
        if(role){
            try {
                console.log("You Won");
                message.member.roles.add(role);
                message.author.send(replyText);
                user.activated = true;
                user.activeToken = "";
                
            }
            catch(err) {
                console.log(err);
                console.log("Error Occured");
            }
            
        }
    }
    else {
        console.log(user);
    }


    
})

这行代码

console.log(user);

返回 (0) [] 与“user.activeToken”

但返回 (1) [模型] 只需常规的“activeToken”

用户架构:

const mongoose = require('mongoose');
const Schema = mongoose.Schema;





//user schema
var UserSchema = new Schema({
    _id: String,
    discord_id: String,
    email: String,
    activeToken: {
        type: String,
        default: "",
    },
    activated: {
        type: String,
        default: false
    },
});

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

module.exports = User;

【问题讨论】:

    标签: node.js mongodb discord.js


    【解决方案1】:

    它总是返回该消息,因为这是您在没有错误时记录的内容!

    if (err) throw err;
    console.log("Couldn't find what you were looking for");
    

    如果出现错误,您将重新抛出它,因此不会执行 console.log。

    我假设你使用的是mongoose

    函数应该这样写

    async get(token) {
        return await User.findOne({"activeToken": token}).exec()
    }
    

    您应该使用findOne 来获取单个对象。

    完整说明请参考: https://mongoosejs.com/docs/promises.html#built-in-promises

    【讨论】:

    • 感谢您的帮助,澄清了很多;但是,即使使用更新的代码,它仍然无法正常工作。 (已编辑问题)
    • 你能分享你的用户架构吗
    • 我刚刚用所有相关代码更新了我的问题
    • 我实际上在使用 mongodb
    • 好的,你使用的是 mongodb,但是 mongoose 包 const mongoose = require('mongoose');
    猜你喜欢
    • 1970-01-01
    • 2016-09-30
    • 2018-09-03
    • 2015-04-19
    • 2018-06-23
    • 2020-02-12
    • 1970-01-01
    • 1970-01-01
    • 2016-03-18
    相关资源
    最近更新 更多