将数据推送到mongodb文档中的数组

时间:2018-05-24 08:25:18

标签: javascript arrays node.js mongodb express

我正在尝试将数据推送到我的用户集合文档中的readBook数组。 如代码bellow和console.log中所示,返回用户从数据库中检索并且有数据要推送,但是在代码完成工作后没有任何更改。控制台中没有显示错误。请帮忙!

我有一个mongodb Schema:

const UserSchema = new mongoose.Schema({
    _id: Number,
    type: {
        type: String,
        required: true,
        default: "personal"
    },
    email: {
        type: String,
        unique: true,
        required: true,
        trim: true
    },
    username: {
        type: String,
        unique: true,
        required: true,
        trim: true
    },
    name: {
        type: String,
        required: true,
        trim: true
    },
    password: {
        type: String,
        required: true,
    },
    readBook: [{
        id: {
            type: String,
        },
       status: {
            type: String
        },
        rating : {
            type: String
        }
    }]

});

尝试使用express:

将数据推送到它
router.post("/ratebook", (req,res,next) => {
  User.findById(1)
  .exec( (error, user) => {
    if(error) {
      return next(error);
    } else {
      console.log(user);
      console.log(req.body);
      User.update( { _id: 1},  { $push: {"readBook": req.body}});      
    } 
  })
})

console.log返回:

{ type: 'admin',
  readBook: [],
  _id: 1,
  email: ‘username@gmail.com',
  username: 'username',
  name: ’Name Surname',
  password: '$2a$10$JcuZNrjEh4KNOZ04TxIKLOy4/hcCK0It0.lAAE4zGN/qPavBFx8GS',
  __v: 0 }
{ id: '1', bookRating: '4’ }

1 个答案:

答案 0 :(得分:1)

您在更新查询上方有console.log位置,如果数据已更新,请在API调用后检查数据库

或使用以下代码并检查console.log。

      router.post("/ratebook", (req,res,next) => {
        User.findById(1)
        .exec( (error, user) => {
          if(error) {
            return next(error);
          } else {
            console.log(user);
            console.log(req.body);
            User.update( { _id: 1},  { $push: {"readBook": req.body}}).exec( (errorU, updatedUser) => { 
            console.log("Update error", errorU);
            console.log("Updated User", updatedUser);
          });     
          } 
        })
      })