首页 > 解决方案 > 带有 async/await 的 Mongodb $pull 无法正常工作

问题描述

我有以下 UserSchema

const userSchema = new Schema({
    // Irrelevant properties
    likedPrograms: [{type:Schema.Types.ObjectId, ref: 'Program'}], 
});

我正在尝试使用此查询从该数组中删除一个程序

const updatedUser = await User.findOneAndUpdate({_id: req.params.id}, {$pull: {likedPrograms: {_id: programToRemove._id}}}, {new: true});

但是,这行代码在执行时并未从数组中删除元素。异步/等待有问题吗?但是,如果我尝试使用回调来完成它,它会起作用,但是我不喜欢在我的代码中使用回调,因为我不想遇到回调地狱。关于为什么这不起作用的任何想法?

标签: arraysnode.jsmongodbasynchronous

解决方案


异步等待或回调没有问题。如果您可以查看您的架构,则您没有在 中获取任何字段likedPrograms,它只是简单的数组,ObjectIds不包含带有键值对的对象数组。

如果你采取这样的做法,它会奏效的

likedPrograms: [{ _id: { type: Schema.Types.ObjectId, ref: 'Program' }}]

推荐阅读