用mongoose从Mongo中删除子文件

我正试图从存储在mongoose文档中的集合中删除项目。 我的文档如下所示:

{ "__v": 3, "_id": "5221040475f174d59a000005", "items": [ { "sku": 1321654654613213, "name": "goldfish", "quantity": 12, "_id": "52224ed5bd9d340000000003" }, { "sku": 12, "name": "goldfish", "quantity": 13, "_id": "52225dcbf2f1e40000000003" }, { "sku": 1299, "name": "goldfish", "quantity": 13, "_id": "522260b6f2f1e40000000004" } ] } 

我想删除12个sku的金鱼。我正在做以下工作:

 var inventory = res.locals.content; inventory.items.remove( {sku: req.params.itemSku}, function (err, item) { if (err) { console.log('error occurred', err); res.send('error'); } else { res.send('Item found and deleted'); return; } }); 

当我这样做,我得到错误“TypeError:无法读取属性'等于'未定义”。 我不明白为什么。

您需要inventory.items.pull(req.params.itemSku) ,然后进行inventory.save调用。 .remove是顶层文件

子文档现在有一个删除function。 从规格中使用如下:

 var doc = parent.children.id(id).remove(); parent.save(function (err) { if (err) return handleError(err); console.log('the sub-doc was removed') }); 

finaly!

 MongoDB: "imgs" : {"other" : [ { "crop" : "../uploads/584251f58148e3150fa5c1a7/photo_2016-11-09_21-38-55.jpg", "origin" : "../uploads/584251f58148e3150fa5c1a7/o-photo_2016-11-09_21-38-55.jpg", "_id" : ObjectId("58433bdcf75adf27cb1e8608") } ] }, router.get('/obj/:id', function(req, res) { var id = req.params.id; Model.findOne({'imgs.other._id': id}, function (err, result) { result.imgs.other.id(id).remove(); result.save(); });