我怎样才能推入mongoose的模式数组?初始数组为空

4jb9z9bj  于 2022-12-27  发布在  Go
关注(0)|答案(2)|浏览(126)

我想使用输入x1c 0d1x更新对象-配置文件数组

我在reactjs中使用express,mongoose。我有一个模式--

const mongoose = require('mongoose');
const bcrypt = require('bcryptjs');
const validator = require("validator");
const { ObjectId } = mongoose.Schema.Types;

const userSchema = new mongoose.Schema({
  email:{
    type: String,
    required: true,
    minlength: 4,
    unique: true,
    validate: {
      validator(email) {
        return validator.isEmail(email);
      },
    },
},
  password:{
    type: String,
    required: true,
    minlength: 5,
    select: false,
  },
  profiles:[ // array of user's profile
    {
      type:ObjectId,
      name:String,
    }
  ]

})

这是我的路线--

router.post('/createProfile', createProfile);

我所尝试的--

module.exports.createProfile = (req,res) =>{
  
  const {name} = req.body;
  console.log(name)
  User.push(profiles,name)
  .then((result)=>res.send(result))
  .catch((err)=>console.log(err))

}

我不知道使用推送的正确方法。我需要使用推送吗?我的配置文件可以吗?

xdyibdwo

xdyibdwo1#

首先,您在模式中指定profiles字段的类型为array of ObjectIds,但看起来您希望它的类型为String,因为您正在尝试将name推入模式。
因此,您应该首先更改Schema模型:

profiles:[ // array of user's profile
  {
    type: String,
  }
]

现在,您可以像这样将新项目推送到该数组:

User.updateOne(
  { _id: req.user._id },
  { $push: { profiles: name } }
)
s4n0splo

s4n0splo2#

你可以在moongose中使用%push操作符

module.exports.createProfile = (req, res) => {
  const { name } = req.body;

  User.findOneAndUpdate(
    { _id: req.user._id },  
    { $push: { profiles: { name } } },
    { new: true, useFindAndModify: false }  
  )
  .then((result) => res.send(result))
  .catch((err) => console.log(err))
};

findOneAndUpdate函数是用来查找用户.并且更新它.正如你要求的

相关问题