Javascript 仅从查找中删除子元素
有没有办法只删除搜索参数底部的子文档 假设我有这样一个疑问:Javascript 仅从查找中删除子元素,javascript,mongodb,mongoose,Javascript,Mongodb,Mongoose,有没有办法只删除搜索参数底部的子文档 假设我有这样一个疑问: const diagnostics = await Diagnostic.find({ 'stepListings.steps.apps': { "$elemMatch": { '_id': "5ed1439ffc2b530012deafd3" } } }); 它将为我提供符合以下要求的所有诊断项目(它的一个步骤列表,至少有一个步骤有一个应用程序,其id为“5ed1439f
const diagnostics = await Diagnostic.find({
'stepListings.steps.apps': { "$elemMatch": { '_id': "5ed1439ffc2b530012deafd3" } }
});
它将为我提供符合以下要求的所有诊断
项目(它的一个步骤列表,至少有一个步骤有一个应用程序,其id为“5ed1439ffc2b530012deafd3”),因此我可以在这里获得多个诊断。如果我使用此查询过滤器删除,它将从根文档(本例中为整个诊断)中删除。是否有方法仅删除搜索的最底部(本例中为步骤中的应用程序),以便我保留诊断、步骤列表和步骤,但使用所需的_id松开应用程序
我可以通过循环诊断,然后是步骤列表…步骤..应用程序并从那里拼接应用程序来完成这件事,但这是一个很长的循环,可能可以在一行中完成。如果你的
步骤列表
,步骤
和应用程序
都是数组,您可以使用with来解决该问题。比如:
Diagnostic.updateMany(
{'stepListings.steps.apps._id': "5ed1439ffc2b530012deafd3" },
{
$pull: {
'stepListings.$[].steps.$[].apps': {_id: "5ed1439ffc2b530012deafd3"}
}
}
);
你的问题解决了吗?顶部和底部都太模糊了。你想更新
diagnostic
集合中的所有文档,使其成为stepListings.steps.apps
数组中没有具有给定id的应用吗?@AlexBlex是的,我想是的。我想查找具有给定id的stepListings.steps.apps的所有诊断文档。如果找到它,我想删除应用程序。文件中没有其他内容。