mongoexport 不导出所有可能的数据

Men*_*kov 5 mongodb export


我有一个包含类似于以下文档的集合:

{
 _id: 'p_123456',
 id: 123456,
 kind: 'person'
 data: [...]
}
Run Code Online (Sandbox Code Playgroud)

id 字段可以包含正整数或负整数。
该集合包含近 1 亿个文档,我有一个 python 脚本,用于处理集合中的数据。

我正在尝试将所有数据导出到 8 个不同的进程中,使用 $mod 运算符按以下方式:
mongoexport -u user -p password -d db -c collection --query "{\$and:[{kind:'person'},{id:{\$mod:[8,\$i]}}]}" | python process.py- 其中 $i 是 0 - 7 之间的数字。

出于某种原因,我注意到当我将这种方法与 8 个进程一起使用时,并非所有数据都被导出到这种特定类型的 8700 万个中的 6500 万个。

如果我{kind:'person'}仅使用查询运行单个 mongoexport 进程,则所有 8700 万个文档都将被导出。

是否有可能运行8个不同proccesses与$mod:[8,0]$mod:[8,7]是不够的,以导出所有的数据?我在这里错过了什么?

编辑 1:
按照 AdamC 的建议,我运行了以下 map reduce:

var map = function() {
  if (this.kind == 'person'){
      var key = this.id % 8
      if (key < 0){
          key = key * (-1)
      }
      emit( key, 1 );
  }
};


var reduce = function( key, values ) {    
  return Array.sum(values);
}
Run Code Online (Sandbox Code Playgroud)

结果按预期返回约 8700 万条记录:

> db.map_reduce_modulus.find()
{ "_id" : 0, "value" : 10886482 }
{ "_id" : 1, "value" : 10878131 }
{ "_id" : 2, "value" : 10881552 }
{ "_id" : 3, "value" : 10882586 }
{ "_id" : 4, "value" : 10886060 }
{ "_id" : 5, "value" : 10882565 }
{ "_id" : 6, "value" : 10886171 }
{ "_id" : 7, "value" : 10883563 }
Run Code Online (Sandbox Code Playgroud)

因此我不认为这是一个类型问题

感谢提前

Ada*_*m C 1

我只能推测,无法访问数据,但我怀疑您在该id字段中有非数字数据。尝试使用$type运算符来验证某些字段是否未作为字符串或类似字段传入,并且所有字段在类型方面都是同质的。