在MongoDB中将字符串转换为服务器端日期

在MongoDB中将字符串转换为服务器端日期,mongodb,etl,Mongodb,Etl,我正试图在MongoDB中使用。它在几个CSV文件中有大约1.7亿条记录,我使用mongoimport导入了这些文件。字符串和数字作为正确的类型导入,但收货和卸货时间戳仍然是字符串。我知道解决这个问题的通常方法: 但这会导致从数据库中提取1.7亿条记录,然后返回替换日期。按照目前的速度,转换所有记录中的两个字段似乎至少需要2天时间。数据库被安置在4个碎片上,而这些机器在这个过程中几乎没有做任何事情。是否有一种更快的方法来进行转换,从而使用更多的数据库资源?如评论中所建议的,如果平衡器关闭,则直接

我正试图在MongoDB中使用。它在几个CSV文件中有大约1.7亿条记录,我使用mongoimport导入了这些文件。字符串和数字作为正确的类型导入,但收货和卸货时间戳仍然是字符串。我知道解决这个问题的通常方法:


但这会导致从数据库中提取1.7亿条记录,然后返回替换日期。按照目前的速度,转换所有记录中的两个字段似乎至少需要2天时间。数据库被安置在4个碎片上,而这些机器在这个过程中几乎没有做任何事情。是否有一种更快的方法来进行转换,从而使用更多的数据库资源?

如评论中所建议的,如果平衡器关闭,则直接在碎片上运行此类查询是安全的。这也将在中讨论。在我的例子中,查询从2天变为2小时。

您可以在每个碎片上运行此过程。确保关闭平衡器。在机器本地的shell中运行它。您甚至可以在每台机器上运行多个进程来进一步细分和并行工作。@AsyaKamsky只是想确定一下:如果我关闭平衡器并在本地运行它,这会影响索引或任何东西吗?我还没有索引任何东西,但我想了解这样做的任何后果。除了正在更新的文档之外,它不会影响任何东西-我想我不确定您到底关心什么。该字段没有索引?并且字符串应该足够大,以便能够进行就地更新。因此,只需原地重写每个文档,这意味着并行执行此操作的线程越多,完成的速度就越快。