Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 使用mongoose更新MongoDB_Node.js_Mongodb_Mongoose - Fatal编程技术网

Node.js 使用mongoose更新MongoDB

Node.js 使用mongoose更新MongoDB,node.js,mongodb,mongoose,Node.js,Mongodb,Mongoose,我试图在用户登录到应用程序后更新用户集合中的字段。但是更新查询根本不起作用 users.js 模型-user.js 所以现在的问题是,一旦请求发送到/login服务,对setOnlineStatus的调用就不会使用值为“online”的新字段状态更新用户集合 注意:使用其他服务/注册用户已添加到用户集合 我是express和mongodb的新手。所以请帮我解决这个问题。 谢谢您,我们将非常感谢您的回答。您需要在模式中定义状态,因为mongoose在更新其他wise read时将忽略它: 尝试将状

我试图在用户登录到应用程序后更新用户集合中的字段。但是更新查询根本不起作用

users.js

模型-user.js

所以现在的问题是,一旦请求发送到/login服务,对setOnlineStatus的调用就不会使用值为“online”的新字段状态更新用户集合

注意:使用其他服务/注册用户已添加到用户集合

我是express和mongodb的新手。所以请帮我解决这个问题。 谢谢您,我们将非常感谢您的回答。

您需要在模式中定义状态,因为mongoose在更新其他wise read时将忽略它:

尝试将状态:{type:String}添加到架构中

此外,update函数返回一个读取的查询:除非传递回调或使用.exec执行回调,否则它不会更新


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);