【发布时间】:2018-11-30 13:11:47
【问题描述】:
我有一个包含 360,000 个文档的 mongoDB 集合和一个包含 160,000 行的文本文件,其中 id 和文本由破折号分隔,如下格式:
333-nice
66446-bad
88-good
...
我希望文本文件中破折号前的 id 与集合文档中的字段匹配时,更新或在新集合中创建文档。
我使用了以下查询,但它很慢,而且需要很长时间:
db.items_01.find().snapshot().forEach(function(elem)
{
var products = cat("/Users/amirali/Desktop/kala.txt");
var lines = products.split('\n');
for(var i = 0;i < lines.length;i++)
{
var g_name = lines[i].split("-").pop();
var pIg = g_name.replace("\"","");
var pId = lines[i].substr(1, lines[i].indexOf('-')-1);
var field = elem.i_code;
if(field.substring(0, 2) == pId)
{
db.items_additionals.update({
"i_code": field
},
{
$set:
{
"i_code" : field,
"class_id": field.substring(0, 2),
"class": pIg
}
},{upsert:true});
}
if(field.substring(0, 3) == pId)
{
db.items_additionals.update({
"i_code": field
},
{
$set:
{
"i_code" : field,
"subclass_id": field.substring(0, 3),
"subclass": pIg
}
},{upsert:true});
}
if(field.substring(0, 4) == pId)
{
db.items_additionals.update({
"i_code": field
},
{
$set:
{
"i_code" : field,
"group_id": field.substring(0, 4),
"group": pIg
}
},{upsert:true});
}
if(field.substring(0, 5) == pId)
{
db.items_additionals.update({
"i_code": field
},
{
$set:
{
"i_code" : field,
"subgroup_id": field.substring(0, 5),
"subgroup": pIg
}
},{upsert:true});
}
if(field.substring(0, 6) == pId)
{
db.items_additionals.update({
"i_code": field
},
{
$set:
{
"i_code" : field,
"category_id": field.substring(0, 6),
"category": pIg
}
},{upsert:true});
}
if(field.substring(0, 7) == pId)
{
db.items_additionals.update({
"i_code": field
},
{
$set:
{
"i_code" : field,
"subcategory_id": field.substring(0, 7),
"subcategory": pIg
}
},{upsert:true});
}
}
});
注意:文档中的 i_code 字段类似于8816370532410001
如何更改此查询以加快进度?
【问题讨论】:
标签: javascript mongodb