javascript - Express:将元素推送到模型的数组中

标签 javascript express

我有这个模型:

var userSchema = new mongoose.Schema(
    {
        userName: {type: String, required: true},
        firstName: {type: String},
        lastName: {type: String},
        password: {type: String, required: true},
        email: {type: String},
        profileImg: String,
        weight: {type:Array, default:[]},
        schedules: {type: [schedule], default: []},
        dateCreated: {type: Date, required: true, default: Date.now},
    }
);

如您所见,我有一个必须包含数字的“重量”字段,当我尝试在其中进行放置和推送新数字时,我有一些奇怪的行为,这是服务器端:

  var data = req.body;
    var _id = req.params.userid.replace(new RegExp('"', 'g'), "")
    User.findById(_id, fieldsFilter, function (err, user) {
        if (err) return next(err);
        console.log('*********', data.weight)

        if (user) {
            user.userName = data.userName ? data.userName : user.userName;
            user.firstName = data.firstName ? data.firstName : user.firstName;
            user.lastName = data.lastName ? data.lastName : user.lastName;
            user.email = data.email ? data.email : user.email;
            //TODO check if weight is in correct form
            // HERE!!
            user.weight = data.weight ? user.weight.push( data.weight) : user.weight;
            user.save(onModelSave(res));
            console.log(user.weight)
        } else {
            //user does not exist create it
            var newUser = new User(data);
            newUser._id = ObjectId(req.params.userid);
            newUser.save(onModelSave(res, 201, true));
        }

如您所见,我有两个控制台日志和 data.weight 的值为 5,这是打印的输出:

********* 5
[1]

所以在数组中它存储了 1? 我不明白问题出在哪里。

提前致谢

最佳答案

问题是这样的:

user.weight = data.weight ? user.weight.push( data.weight) : user.weight;

如果 data.weight 存在,则将 user.weight.push() 的结果分配给 user.weight。这是new length of the array (如果 user.weight 之前为空,则为 1)。

看起来你想要这个:

if (data.weight) {
  user.weight.push(data.weight);
}

关于javascript - Express:将元素推送到模型的数组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34437522/

相关文章:

node.js - 在 Node.js 中结束请求 Formidable

javascript - 如何合并两个对象数组

javascript - 同步window.setTimeout回调

javascript - 如何在 Nuxt 中点击链接下载文件?

node.js - 使用 Gitlab Runner 部署到 Digital Ocean 时出现 "docker pull"需要恰好 1 个参数错误

javascript - app.js 文件中出现错误,我无法破解

javascript - 我试图让 jquery 在我的 chrome 扩展的 background.js 中工作,但它不起作用。为什么?

java - 运行 Nashorn JavaScript 的 Gradle 任务

javascript - 为什么这个 promise 链没有按顺序返回?

node.js - 在 React/Redux 应用程序的 cookie 中保护 JWT 的最佳方法是什么?