我有一个像这样的用户架构
const userSchema = new Schema({
username: {
type: String,
unique: true,
required: true,
},
cardIds: [{
type: Schema.Types.ObjectId,
ref: 'cards',
}],
})
mongoose.model('users', userSchema)
我正在尝试在用户的预保存挂钩中执行两项操作:首先,使用用户ID保存每张卡,然后将cardIds
添加到用户。我的代码:
const Card = mongoose.model('cards')
userSchema.pre('save', function (next) {
if (this.cardIds.length === 0) {
cardList.forEach(async card => {
const newCard = await new Card({ ...card, user: this })
this.cardIds.push(newCard) // this is not working
newCard.save() // this is working
})
}
next()
})
这会使用正确的cards
将每张卡片添加到user._id
集合中,但是,每个用户仍然会为cardIds
添加一个空数组。
我保存用户的方式是(为方便起见省略错误处理/验证):
app.post('/users/new', async (req, res) => {
const newUser = await new User({ username: req.body.username })
await newUser.save()
return res.json({ message: 'User created successfully' })
})
答案 0 :(得分:1)
这基本上是一个将元素推送到数组的javascript代码this.cardIds.push(newCard)
,但它不会对您的mongo数据库执行任何操作...
因此,为了更新mongodb中的数组,您需要使用$push运算符
userSchema.pre('save', function (next) {
if (this.cardIds.length === 0) {
cardList.forEach(async card => {
const newCard = new Card({ ...card, user: this })
const saveNewCard = await newCard.save() // this is working
const updateUser = await User.update(
{ _id: this._id },
{ $push: { cardIds: saveNewCard._id }}
)
})
}
next()
})