Mongoose 从架构 arr 中删除对象 [重复]

Posted

技术标签:

【中文标题】Mongoose 从架构 arr 中删除对象 [重复]【英文标题】:Mongoose remove object from a Schema arr [duplicate] 【发布时间】:2018-01-25 16:50:56 【问题描述】:

您好,我正在尝试使用 Mongoose 从我的模型中删除一个数组,但它似乎不起作用。我想从 collectionImages 中删除一个对象。这是我的代码:

架构

var CollectionSchema = mongoose.Schema(
    collectionName: String,
    collectionImages: [
        
            imageName: String,
        
    ],
    path: String
);

删除方法:

router.delete("/collection/:id/:imageId", function (req, res) 
    var imageId = req.params.imageId;

    Collections.findById(req.params.id, function (err, collections) 
        if (err) 
            console.log(err);
         else 

            for (var i = 0; i < collections.collectionImages.length; i++) 
                if (collections.collectionImages[i]._id == imageId) 
                    var checkedImageId = collections.collectionImages[i]._id;
                     collections.collectionImages[i].splice(imageId,1);
                ;
            

        
        ;
    );
);

形式:

 <form id="deleteForm" action="/collection/<%= collections._id %>/<%= image._id %>?_method=DELETE" method="post">
                    <button class="fa fa-minus-circle">Delete</button>
                </form>

【问题讨论】:

@ Neil Lunn 是的,我看到它是一样的,但是提供的解决方案也对我不起作用。我希望有更多经验的人可以帮助我 【参考方案1】:

试试下面的

Collections.update(
    _id: req.params.id ,
    $pull:  'collectionImages':  '_id': req.params.imageId   
).exec(function (err, user) 
    if (err)  res.status(500).send(err); return; 
    res.send();
);

更多信息请阅读this

【讨论】:

Hy @nmanikiran 我试过了,我没有收到 500 错误,但对象仍然存在。 它成功了,我不得不将路由器和 _method 更改为 PUT。坦克@nmanikiran

以上是关于Mongoose 从架构 arr 中删除对象 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

mongoose - 从 3 级深度数组中添加和删除对象

无法使用 Mongoose 删除数组中的对象

从Mongoose的数组中删除一个对象[重复]

从 Mongoose/MongoDB 中的数组中删除对象

Mongoose - 如何从数组元素中删除对象[重复]

Mongoose 子文档预删除中间件未调用