party
{
_id: new ObjectId('6570d8aef19ec1c690cc8d34'),
name: 'party',
items: [
{
name: 'Welcome to your todo list',
_id: new ObjectId('6570d8aaf19ec1c690cc8d31')
},
{
name: 'Hit the + button to add a new item.',
_id: new ObjectId('6570d8aaf19ec1c690cc8d32')
},
{
name: 'Hit this to delete an item.',
_id: new ObjectId('6570d8aaf19ec1c690cc8d33')
},
{ name: 'heya', _id: new ObjectId('6570ee634c6ed501ba04974a') },
{ name: 'hoiya', _id: new ObjectId('6570eea34c6ed501ba049778') },
{ name: 'heyty', _id: new ObjectId('6570ef6d934fb47039850682') },
{ name: 'dsfdsf', _id: new ObjectId('6570efcad07077740a80ce5a') },
{ name: 'hey', _id: new ObjectId('6570f193c6b50f3c3d692951') },
{ name: 'hiii', _id: new ObjectId('6570f1bcc6b50f3c3d69299b') }
],
}
字符串
我试图访问内部数组(items
)的_id
以在该ID上应用删除。我想通过_id
删除该项目,但不幸的是,我无法在Mongoose文档网站上的文档/示例中找到答案。我目前正在使用Mongoose
“mongoose”:“^8.0.2”
所以我更倾向于在NodeJS上使用nodec/await方法。
// Equivalent to `parent.children.pull(_id)`
parent.children.id(_id).deleteOne();
型
显然,使用这两种方法对我来说都不起作用,它返回undefined
(我可能做得不对)。
我希望使用_id
的项目删除一个项目的ID。请建议Mongoose方法只。
2条答案
按热度按时间bvpmtnay1#
您需要
$pull
运算符从items
数组中删除匹配的对象。字符串
Demo @ Mongo Playground的
ccrfmcuu2#
Mongoose有两种特定于Mongoose的方法来处理这种操作,第一种方法效率最低,但最容易理解。
1.使用
MongooseArray.prototype.pull()
这是一个三步的过程,涉及到找到你想要的文档,从数组中拉取它,然后将它保存回数据库。因为你对db进行了两次调用,所以效率较低,但逻辑清晰:
字符串
1.使用
Model.findOneAndUpdate()
这是更有效的,因为它是一个单步过程,包括找到你想要的文档并传入一个
update
文档。该更新文档可以是一个mongodb操作,例如@Yong Shun answer中的$pull
操作符。findOneAndUpdate
和updateOne
之间的主要区别是findOneAndUpdate
将返回实际文档,无论是在您更新之前的状态还是在您更新之后的状态,这是您可以配置的。而updateOne
将返回更新状态文档,其中包含有用的属性,如acknowledged
和modifiedCount
,但不包含任何文档数据字段或值。如果您需要将文档返回到前端,请使用findOneAndUpdate
,否则没有区别:型