我想将我的car
对象数组保存到mongoose中的user.cars字段。
我的用户架构如下所示:
const UserSchema = new Schema({
firstName: {
type: String,
required: true
},
lastName: {
type: String,
required: true
},
cars: [{
type: Array,
required: false
}]
})
我将用户汽车保存在汽车终端上,如下所示:
router.route('/cars')
.post(async function (req, res) {
User.findById(req.user._id)
.then((user, err) => {
if (err) {
return res.json({err})
}
if (user && user._id) {
user.cars = req.body.cars
user.save(function (err) {
if (err) {
res.status(500)
return res.json({
success: false,
message: err.message || 'Update failed'
})
}
ioServer.sockets.emit('update-users')
res.status(200).json({
success: true,
message: 'User updated successfully'
})
})
} else {
return res.json({message: 'No user', success: false})
}
})
.catch(err => console.log(err))
})
我的req.body日志如下:
{ cars: [
{
type: 'Sedan',
make: 'BMW',
model: '525i',
[...]
},
{
type: 'Coupe',
make: 'Subaru',
model: 'BRZ',
[...]
},
{
type: 'SUV',
make: 'Toyota',
model: 'Rav4',
[...]
}
]
}
此代码有效,但是mongoose将数据保存为新数组,因此它看起来像这样:
{ user.cars: [
[
{car},
{car},
...
]
]}
但是我希望将user.cars作为一个对象数组,而不是将新数组传递给汽车。
非常感谢您帮助我找到我在代码中出错的地方。
答案 0 :(得分:1)
实际上,您不需要找到用户并再次保存,而是可以使用$push运算符来设置汽车阵列......
router.route('/cars')
.post(async function (req, res) {
User.findOneAndUpdate({_id: req.user._id}, {$push: { cars: {$each: req.body.cars}}})
.then((user, err) => {
if (err) {
return res.json({err})
}
res.status(200).json({
success: true,
message: 'User updated successfully'
})
})
.catch(err => console.log(err))
})
答案 1 :(得分:0)
在您的模型架构中,您将cars
的类型定义为Array
。这就是它保存数组结构等数据的原因。
cars: [{
type: Array,
required: false
}]
而是创建一个清晰的字段模式:
cars: [{
type: String,
make: String,
model: String,
...
}]
这会修复您的数据。