【问题标题】:how to delete many documents from a collection based on a condition with values from an other collection如何根据具有来自其他集合的值的条件从集合中删除许多文档
【发布时间】:2020-07-25 10:32:52
【问题描述】:

这里附上聚合查询 我想从同一个集合“历史”中删除此查询的所有返回值 怎么办?

假设我有一组名为“历史”的股票市场公司记录

{_id:"value",symbol:"value",date:"value",open:"value",close:"value",......}

我的文件应该有每个公司每天的文件,每个公司总共 42 天的记录 但在检查数据后,似乎有些公司没有“一个文件/天”的所有 42 天记录,他们的记录更少 所以我想删除那些没有完全 42 个文件的公司 我的 group by 将在“符号”上我对“日期”的计数我可以获得列表但我不知道如何删除它

【问题讨论】:

  • 请用文本格式的数据而不是图像来编辑这个问题!另外,其他集合中的值是什么意思请给我们示例文档、输入和所需的 o/p..

标签: mongodb mongodb-query


【解决方案1】:

您可以运行.remove 方法删除它们。

db.history.aggregate(...).forEach(function(doc){
    db.history.remove({symbol: doc._id});
})

注意:速度很慢。

替代解决方案:更改聚合条件以返回有效文档并使用 $out 运算符覆盖 history 集合:

db.history.aggregate([
  {
    $group: {
      _id: "$symbol",
      nbr_jours: {
        $sum: 1
      },
      data: {
        $push: "$$ROOT"
      }
    }
  },
  {
    $match: {
      nbr_jours: {
        $gte: 42 //$eq
      }
    }
  },
  {
    $unwind: "$data"
  },
  {
    $replaceRoot: {
      newRoot: "$data"
    }
  },
  {
    $out: "history"
  }
])

注意:速度非常快。

【讨论】:

  • 谢谢,第一个有效,时间不到 40 秒没有替代解决方案的 pb 我需要练习更多我现在想不通
猜你喜欢
  • 2021-08-18
  • 2018-08-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-08
  • 1970-01-01
  • 2021-07-25
  • 2023-01-31
相关资源
最近更新 更多