Node.js 使用mongoose更新MongoDB
我试图在用户登录到应用程序后更新用户集合中的字段。但是更新查询根本不起作用 users.js 模型-user.js 所以现在的问题是,一旦请求发送到/login服务,对setOnlineStatus的调用就不会使用值为“online”的新字段状态更新用户集合 注意:使用其他服务/注册用户已添加到用户集合 我是express和mongodb的新手。所以请帮我解决这个问题。 谢谢您,我们将非常感谢您的回答。您需要在模式中定义状态,因为mongoose在更新其他wise read时将忽略它: 尝试将状态:{type:String}添加到架构中 此外,update函数返回一个读取的查询:除非传递回调或使用.exec执行回调,否则它不会更新Node.js 使用mongoose更新MongoDB,node.js,mongodb,mongoose,Node.js,Mongodb,Mongoose,我试图在用户登录到应用程序后更新用户集合中的字段。但是更新查询根本不起作用 users.js 模型-user.js 所以现在的问题是,一旦请求发送到/login服务,对setOnlineStatus的调用就不会使用值为“online”的新字段状态更新用户集合 注意:使用其他服务/注册用户已添加到用户集合 我是express和mongodb的新手。所以请帮我解决这个问题。 谢谢您,我们将非常感谢您的回答。您需要在模式中定义状态,因为mongoose在更新其他wise read时将忽略它: 尝试将状
User.update{'username':username},{$set:{'status':'Online'}}.exec我尝试添加了.exec,但还是一样。用户集合中没有名为status的新字段。哦,没有注意到,请尝试将status:{type:String}添加到架构中。您需要在架构中定义status属性,mongoose不会在该属性集之外创建任何内容。但是,如果字段不存在,使用它将自动创建一个字段。对吗?实际上我不知道这一点,在文档中也找不到关于这一点的信息,AFAIK$set只是为了不覆盖整个文档,mongoose会忽略模式之外的任何内容,同时为您的回答和评论省下很多钱。谢谢。
var express = require('express');
var router = express.Router();
var User = require('../models/user');
var jwt = require('jsonwebtoken');
router.post('/login', function(req,res,next){
let promise = User.findOne({email:req.body.email}).exec();
promise.then(function(doc){
if(doc) {
if(doc.isValid(req.body.password)){
// generate token
let token = jwt.sign({username:doc.username},'secret', {expiresIn : '3h'});
setOnlineStatus(doc.username);
} else {
return res.status(501).json({message:' Invalid Credentials'});
}
} else {
return res.status(501).json({message:'User email is not registered.'})
}
});
promise.catch(function(err){
return res.status(501).json({message:'Some internal error'});
})
})
function setOnlineStatus(username){
console.log(username); // log the correct username value
User.update(
{'username': username},
{$set: {'status':'Online'}},
);
}
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var bcrypt = require('bcrypt');
var schema = new Schema({
email : {type:String, require:true},
username: {type:String, require:true},
password:{type:String, require:true},
creation_dt:{type:Date, require:true}
});
schema.methods.isValid = function(hashedpassword){
return bcrypt.compareSync(hashedpassword, this.password);
}
module.exports = mongoose.model('User',schema);