我遇到了以下情况,我需要非常频繁地更新大量集合。
我有一个像下面这样的集合
coll1
{
"identification_id" : String,
"name" : String,
"mobile_number" : Number,
"location" : String,
"user_properties" : [Mixed types],
"profile_url" : String
}
coll2
{
"identification_id": String,
"user_id" : String,
"name" : String,
"mobile_number" : Number,
"location" : String,
"user_properties" : String,
"profile_url": String,
"qualified_user" : String,
"user_interest_stage" :Number,
"source" : String,
"fb_id" : String,
"comments":String
}
updated coll1
{
"identification_id": String,
"name" : String,
"mobile_number" : Number,
"location" : String,
"user_properties" : String,
"profile_url": String,
"qualified_user" : String,
"user_interest_stage" :Number,
"source" : String,
"fb_id" : String,
"comments":String
}
正如您所看到的 coll1 和 coll2,下面将插入文档场景
- 如果来自 coll1 的用户在某些场景下对产品表现出兴趣是合格的,我将在 coll2 中创建一条记录。
- 手动我可以从 coll2 中的 API 信息创建新记录
- coll2 中 coll1 的标识是 user_id
- coll1 中的一条记录可能在 coll2 中有多个记录
现在由于某些原因,我们将这些集合合并为一个集合,即 coll1。我们决定根据键 'qualified_user' 更新合格的访问者,并更新 coll1 中的相应用户字段。
我编写了一个脚本,使用 Node JS 和 mongoose,它将从 coll1 获取文档并验证 coll2 中的qualified_user 并根据以下场景进行更新。
- 如果没有合格用户,则使用不合格用户的默认值更新文档
- 如果有一个合格用户,则从 coll2 复制资格文件并在 coll1 中更新
- 如果有多个合格用户复制第一个文档并在 coll1 中更新。对于 coll2 中的其余文档,在 coll1 中创建一个新文档
- coll1 处理完所有文档后,处理 coll2 文档,这些文档通过 API 限定,并在 coll1 中创建一个新文档。
当我运行此脚本时,出现以下错误。
<--- JS stacktrace --->
==== JS stack trace =========================================
coll1 中的文档数为 1L。由于处理了大量的收藏品,我遇到了这种情况。所以我使用了跳过和限制来处理所有文件,但处理所有文件需要 1 小时。
有没有更好的方法来处理大量集合的这些类型的数据库更新?