【问题标题】:How to divide mongo documents across multiple collections?如何在多个集合中划分 mongo 文档?
【发布时间】:2019-07-11 17:50:40
【问题描述】:

我有一个包含近 8kk 条记录的集合,此时某些操作(如写入)需要很长时间才能完成,为了解决这个问题,我认为可以将文档拆分到多个集合中,例如;

具有从 a 和 e 开始的特定键的所有文档将在 a_to_e 集合中,从 f 和 j 开始的文档将在 f_to_j 集合中,依此类推...

这个实现在代码(python)中不需要太多负担,但我在想这样的资源是否在 mongodb 上以某种方式“默认”可用,如果是,我怎么能实现它,如果不是,这个是这种情况下可接受的解决方案吗?

【问题讨论】:

  • 您使用的是哪个特定版本的 MongoDB 服务器?将单个集合拆分为多个集合并不会真正改变工作集要求:您仍在读取和写入相同的数据(可能有更多打开的文件供mongod 管理)。除非您不需要处理可能最终位于不同集合中的文档范围,否则使用多个集合也会使查询更具挑战性。我会考虑调整您的性能:调查缓慢的查询/命令并可能增加资源。

标签: mongodb


【解决方案1】:
db.collection.aggregate({"$match":{ name: { $in: 
[/^a/i,/^b/i,/^c/i,/^d/i,/^e/i]} }},{"$out":"a_to_e"})
**so on execute queries**

【讨论】:

  • 很有趣,谢谢你的建议,你能告诉我如何迭代一个数组并“移动”另一个集合的结果吗?文档结构是这样的:{id: 1, persons: [{id: 1}, {id: 2}]} 我需要将所有内容从persons 移动到另一个集合,但不是作为数组
  • db.getCollection('persons').aggregate({"$project":{"persons.id":1,"_id":0}},{"$unwind":"$人"},{"$out":"anotherCollection"})
  • 这个查询只导出id = 1的人,我怎样才能导出所有内容?可以在exporting 之前编辑persons 的内容吗?例如,我想在persons 的每个对象上添加当前id,然后再将其移动到另一个集合...
  • db.getCollection('persons').aggregate({"$project":{"_id":0}},{"$unwind":"$persons"},{"$out ":"anotherCollection"})
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-28
  • 1970-01-01
  • 1970-01-01
  • 2019-06-02
  • 2018-05-27
  • 2019-05-23
相关资源
最近更新 更多