可以't使用javascript和mongodb将json对象推送到数组中

Can't push a json object into array using javascript and mongodb

本文关键字:对象 json 数组 mongodb 使用 javascript 可以      更新时间:2024-03-07

我在推入学生模型数据时遇到问题,其模式如下:

var StudentSchema = new Schema({
    firstName: {
        type: String,
        trim: true,
        default: ''
        //validate: [validateLocalStrategyProperty, 'Please fill in your first name']
    },
    lastName: {
        type: String,
        trim: true,
        default: ''
        //validate: [validateLocalStrategyProperty, 'Please fill in your last name']
    },
    worksnap: {
        user: {
            type: Object
        },
        timeEntries : [],
    },
    timeEntries : []
});

而我推送项目的javascript代码看起来是这样的:

Student.findOne({
            'worksnap.user.user_id': item.user_id[0]
        })
        .populate('user')
        .exec(function (err, student) {
            if (err) {
                throw err;
            }
            //student.timeEntries.push(item); // this works
            student.worksnap.timeEntries.push(item); // this does not work
            student.save(function (err) {
                if (err) {
                    //return res.status(400).send({
                    //    message: errorHandler.getErrorMessage(err)
                    //});
                } else {
                    console.log('item inserted...');
                }
            });
        });

正如你所看到的,如果我在工作捕捉对象之外使用timeEntries数组,它工作得很好,它会将项作为对象插入到该数组中。。。我只是不知道为什么它在工作快照对象内部不起作用。

在mongo 中,有没有其他选项可以将json对象添加到数组类型中

感谢

使用.lean()

启用精简选项的查询返回的文档是纯JavaScript对象,而不是MongooseDocuments。它们没有保存方法、getters/ssetter或其他Mongoose魔法

Student.findOne({
    'worksnap.user.user_id': item.user_id[0]
  })
  .populate('user')
  .lean()//-----Added!
  .exec(function(err, student) {
    if (err) {
      throw err;
    }
    //student.timeEntries.push(item); // this works
    student.worksnap.timeEntries.push(item); // this does not work
    student.save(function(err) {
      if (err) {
        //return res.status(400).send({
        //    message: errorHandler.getErrorMessage(err)
        //});
      } else {
        console.log('item inserted...');
      }
    });
  });