我有一个名为Message的mongoose模型,当创建该模型时,我想将Message Id保存到另一个名为User的模型中的数组中。但是,当调用findByIdAndUpdate方法时,它不修改用户模型,也不返回错误消息。我已经检查过我使用了正确的用户ID,并且消息ID也有效。关于为什么mongoose这样做的任何想法?
Message.post('save', function addMessageToUser(doc) {
User.findByIdAndUpdate(doc.userID, {
$push: {
messages: {
$each: [doc._id],
$sort: { createdAt: 1 },
$slice: -1000,
},
},
}, {
new: true,
}, (response, error) => {
console.log(response);
console.log(error);
})
});
答案 0 :(得分:1)
在mongo cli中尝试相同的命令后,我发现doc.userID没有被强制转换为ObjectId。相反,我在执行查询之前使用mongoose.Type.Object(doc.userID)将字符串强制转换为ObjectId。
Message.post('save', function addMessageToUser(doc) {
User.update({
"_id": mongoose.Types.ObjectId(doc.userID),
}, {
$push: {
messages: {
$each: [doc._id],
$sort: { createdAt: 1 },
$slice: -1000,
},
},
})
}