MongoDB-计数与文档数不匹配

时间:2019-03-14 12:24:04

标签: mongodb

我正在尝试编写一个将文档从collection_one移到collection_two的函数。我遇到了一个奇怪的错误,计数没有加起来。

  

collection_one.count({})返回330万记录

移动所有文档后,collection_two.count({})返回320万。

collection_one中的每个文档都包含唯一的uuid run_id。当我运行以下命令时,这些是输出:

  

collection_one.count({'run_id':{$ eq:'uuid'}}),我得到了320万
  collection_one.count({'run_id':{$ ne:'uuid'}}),我得到0;

基本上,有10万条丢失的记录,这些记录仅显示为空计数。
我尝试通过pymongo并在shell中使用copyTo()以几种不同的方式移动文档。

for doc in source.find():
    try:
        target.insert(doc)
    except:
        print('Did not copy')

和批处理移动功能

for n in range(0, ceil_num_of_batches):
    result = source.find(data_filter).limit(batch_size).skip(n*batch_size)
    insert_queries = [InsertOne(doc) for doc in result]
    try:
        target.bulk_write(insert_queries)
    except BulkWriteError as bwe:
        logger.error(bwe.details)

这两者都会产生相同的错误。 copyTo()但是会复制全部330万,但已弃用。
Collection_two具有唯一索引,而collection_one没有。

1 个答案:

答案 0 :(得分:1)

您需要使用countDocuments个文档来获得准确的文档计数。 Count使用内部元数据,并且可能不会始终提供准确的结果。