Javascript Mongoose删除整个文档,而不是从嵌套数组中删除元素
我有这样的结构:Javascript Mongoose删除整个文档,而不是从嵌套数组中删除元素,javascript,node.js,mongoose,Javascript,Node.js,Mongoose,我有这样的结构: { name : 'name1' projects : [ {projectId : 123 , ...more}, {projectId : 124 , ...more}, {projectId : 125 , ...more}, ] } { name : 'name2' projects : [ {projectId : 126 , ...} {projectI
{
name : 'name1'
projects : [
{projectId : 123 , ...more},
{projectId : 124 , ...more},
{projectId : 125 , ...more},
]
}
{
name : 'name2'
projects : [
{projectId : 126 , ...}
{projectId : 127 , ...}
]
}
要查找基于projectId的单个条目,我使用以下代码:
const project = await ClientManager.findOne({
project: {$elemMatch: { projectId: projectId } },
}, {'project.$': 1});
这很有效。但是现在我想从projects数组中删除一个项目,而不仅仅是查找文档
我尝试在末尾添加删除,但这会删除我的整个文档。我只想从projects数组中删除与给定projectId匹配的单个项目:
const project = await ClientManager.findOne(
{
project: { $elemMatch: { projectId: projectId } },
},
{ 'project.$': 1 }
).remove();
要从项目数组中删除单个项,可以使用$pull
await ClientManager.findOneAndUpdate(
{ "projects.projectId": projectId },
{ $pull: { projects: {projectId: projectId} } }
);
此外,您不需要使用$elemMatch来查找文档,因为您只需要检查单个字段,即projectId。您可以改为执行此查询
const project = await ClientManager.findOne({
"projects.projectId": projectId
}, {"project.$": 1});
要从项目数组中删除单个项,可以使用$pull
await ClientManager.findOneAndUpdate(
{ "projects.projectId": projectId },
{ $pull: { projects: {projectId: projectId} } }
);
此外,您不需要使用$elemMatch来查找文档,因为您只需要检查单个字段,即projectId。您可以改为执行此查询
const project = await ClientManager.findOne({
"projects.projectId": projectId
}, {"project.$": 1});
您的解决方案删除了整个集合,包括名称etcI。您是否只想从该项目数组中删除项而不是文档?请允许我编辑我的回答和问题,因为您提到它删除的是整个集合,但不正确。您的解决方案删除了整个集合,包括名称etcI。您是否想删除只是从项目数组中删除项而不是文档?让我编辑我的答案和问题,因为您提到它删除的是整个集合,这是不正确的