为什么MongoDB不保存我的属性

Jas*_*n94 8 javascript mongoose mongodb node.js

我正在使用一些虚拟数据填充我的数据库,我正在尝试添加用户.创建了一个用户对象,但没有任何属性保存...最新消息?

app.get('/setup', function (req, res) {

    User.findOne({ name: "Nick" }, function (err, user) {

        if (user == undefined) {

            var nick = new User({
                name: "Nick",
            }).save();

            res.json({ "success": true, "msg": "user created" });
        } else {
            res.json({ "success": true, "msg": "user existed" });
        }
    });
});
Run Code Online (Sandbox Code Playgroud)

调用此返回"用户创建".这是我输出所有用户的方法:

app.get('/users', function(req, res) {

    User.find({}, function(err, user) {
        res.json(user);
    });
});
Run Code Online (Sandbox Code Playgroud)

这里的输出是

[
  {
    "_id": "565772db5f6f2d1c25e999be",
    "__v": 0
  },
  {
    "_id": "5657734ba859fefc1dca77db",
    "__v": 0
  },
  {
    "_id": "5657738ba859fefc1dca77dc",
    "__v": 0
  },
  {
    "_id": "565774f1cf99a2b81fca1e7f",
    "__v": 0
  },
  {
    "_id": "565775f0cf99a2b81fca1e80",
    "__v": 0
  }
]
Run Code Online (Sandbox Code Playgroud)

在哪里我试图添加"Nick"几次noe ...任何输入?:d

我的Mongoose模型,与其他模型一起位于自己的Model.js文件中:

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

// set up a mongoose model and pass it using module.exports
module.exports = mongoose.model('User', new Schema({ 
    name: String, 
    password: String, 
}));
Run Code Online (Sandbox Code Playgroud)

Lis*_*ina 5

鉴于您在用户Schema中有一个名称,您还需要等到save()查询完成后再发送响应:

app.get('/setup', function (req, res) {
    User.findOne({ name: "Nick" }, function (err, user) {
        if (err) {
          return res.json({ "success": false, "error": err });
        }

        if (user) {
          return res.json({ "success": true, "msg": "user existed" });
        }

        var nick = new User({ name: "Nick" });
        nick.save(function(err, userObj) {
           if (err) {
             return res.json({ "success": false, "error": err });
           }

           res.json({ "success": true, "msg": "user created" });
        });
    });
});
Run Code Online (Sandbox Code Playgroud)

  • 因为save()方法是异步的,所以在发送成功响应之前,您需要确保没有错误并且文档已成功插入. (2认同)

Kun*_*dia 2

您需要在用户架构中定义名称键才能保存。

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

var userSchema = new Schema({
  name: String
});

var User = mongoose.model('User', userSchema);
Run Code Online (Sandbox Code Playgroud)