Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/409.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 仅从查找中删除子元素_Javascript_Mongodb_Mongoose - Fatal编程技术网

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的所有诊断文档。如果找到它,我想删除
应用程序。文件中没有其他内容。