【发布时间】:2021-02-12 03:55:21
【问题描述】:
我有一个用户模式模型,其中address 字段(应该)通过地址模式模型填充。为了更新我在请求正文中传递的地址模式,并通过从req.user 中提取用户的 ID 填充了userId 字段。我可以向地址字段添加新条目,但是当我查看 Atlas 中的用户模型时,它没有被填充。
我的假设是它会根据用户的 ID 自动填充,但事实似乎并非如此。我是不是搞错了?
路线:
const addAddress = async (req, res) => {
try {
console.log(req.body);
// Destruct Request
const { name, street, city, state, zipcode } = req.body;
// Define User ID
const user = req.user.id;
const addUserAddress = await User.findById(user, (error, address) => {
if (error) {
return res
.status(500)
.json({ success: false, message: 'An unexpected error occurred.' });
}
let newAddress = new Address({
_userId: user,
name,
street,
city,
state,
zipcode,
});
newAddress.save((err0r) => {
if (error) {
return res
.status(500)
.json({ success: false, message: 'An unexpected error occurred.' });
}
});
});
res.json(addUserAddress);
} catch (error) {
console.error(error);
res.status(500).send('Error adding an address, please try again.');
}
};
地址模型:
const AddressSchema = new mongoose.Schema({
_userId: {
type: ObjectId,
required: true,
ref: 'User',
},
name: {
type: String,
required: true,
unique: false,
},
street: {
type: String,
required: true,
unique: false,
},
city: {
type: String,
required: true,
unique: false,
},
state: {
type: String,
required: true,
unique: false,
},
zipcode: {
type: String,
required: true,
unique: false,
},
});
const Address = mongoose.model('Address', AddressSchema);
exports.Address = Address;
用户模型:
const UserSchema = new mongoose.Schema({
...
address: [
{
type: ObjectId,
ref: 'Address',
},
],
...
});
【问题讨论】:
-
顺便说一句,我看不出在上面的代码中你将新地址推送到用户模型的地址数组中的哪个位置。您必须保存新地址,获取保存的地址 ID(保存时返回)。然后做类似 foundUser.address.push(savedAddress._id); foundUser.save() 你的代码中也有 err0r 而不是“错误”
标签: node.js mongodb express mongoose mern