【问题标题】:Mongoose deleteing subdocuments $pushMongoose 删除子文档 $push
【发布时间】:2020-07-01 04:25:21
【问题描述】:

我在使用 mongoose 删除子文档时遇到问题。

我有这样的架构设置:

let baseSchema = new mongoose.Schema({
    basename: String,   
    admins: [{
        type: mongoose.Schema.Types.ObjectId,
        ref: "User"
    }]
})

Base.admins 由一组具有管理员权限的用户组成。我希望能够从该阵列中删除用户。 下面的代码从 Mongo 获取数据,但没有删除具有该 ID 的用户,它返回的数据与更新/拉取请求之前的数据相同。

await Base.findOneAndUpdate({ _id: baseId }, {$pull: {admins: { _id: userId }}}, { new: true });

我已确定 userId 是使用的对象类型

userId = mongoose.mongo.ObjectID(userId );

有人对如何从管理数组中删除用户然后将文档保存到数据库有任何建议吗?

【问题讨论】:

    标签: node.js mongodb mongoose


    【解决方案1】:

    不知道为什么,但是当我使用 $pullAll 而不是 $pull 时,它起作用了。即

    await Base.findByIdAndUpdate(baseId, { $pullAll: { admins: [userId] } }, { new: true });
    

    【讨论】:

    • 我认为这是因为您使用的是.findByIdAndUpdate,而不是因为$pullAll。如果你使用.findOneAndUpdate,你可能需要像userId一样转换baseId
    • 抱歉,我没有明确说明,但我将两个 ID 都转换为 ObjectId,然后我尝试使用 .findOneAnUpdate,这让我发疯了,我的头在墙上撞了好久。但它现在可以工作了。
    猜你喜欢
    • 2019-07-16
    • 2014-12-02
    • 1970-01-01
    • 2021-02-10
    • 2019-05-27
    • 2016-09-12
    • 1970-01-01
    • 2013-09-04
    • 2019-01-04
    相关资源
    最近更新 更多