我在创建用户并想同时保存与此用户相关联的某些项目时遇到问题。
我设法在可以创建项目并引用与该项目关联的user_id的地方找到它,但是我无法解决如何将用户拥有的所有项目推入用户架构。
我尝试遍历req.body.taken并添加到用户模式,但是我只是返回null。
router.post('/data', async (req, res) => {
var user = new User({
name: req.body.name,
website: req.body.website,
})
user.save(function (err) {
if (err) {
return next(err);
}
})
req.body.taken.forEach((item) => {
var item = new Item({
x: item.x,
y: item.y,
xSize: item.xSize,
ySize: item.xSize,
user: user,
imageSource: item.imageSource,
user: user
}
)
item.save(function (err) {
if (err) {
return next(err);
}
})
})
const UserSchema = new Schema(
{
id: Number,
name: String,
website: String,
items: [{
type: mongoose.Schema.Types.ObjectId,
ref: 'Item'
}]
},
{ timestamps: true }
);
const ItemSchema = new Schema(
{
id: Number,
x: Number,
y: Number,
xSize: String,
ySize: String,
imageSource: String,
user: { type: mongoose.Schema.ObjectId, ref: 'User' }
},
{ timestamps: true }
);
User.find({})
.populate('items')
.exec(function(error, items) {
console.log(items)
})
当我致电“用户查找”时,我想获取与该用户相关联的所有商品(它将是一个数组,作为req.body.taken是一个商品数组。
答案 0 :(得分:1)
这里有几个问题。
您不等待user.save,很有可能在返回用户文档之前保存所有items
。您应该await
对user.save
做出承诺,或者将items.forEach
循环放入回调中。同样,您保存的是整个对象,而不是返回的user._id
,猫鼬不允许这样做,因为它与方案不匹配。使创建失败。
您没有在用户中保存items数组,如果该字段为空,您将如何期望填充它。您的代码流程需要稍作更改,以允许您更新此字段。