我要求我需要搜索集合中动态的字段 示例如下图所示,我想搜索title =“Toshiba Satellite Pro 4600 PIII800”,但标题将从文档更改为文档。
第一个文件标题是指“xyz”,它是该文件的标题 第二个文件标题是指“abc”,它是该文件的标题。
{
"_id" : ObjectId("5640bdec1b988de0be31724e"),
"xyz" : "Toshiba Satellite Pro 4600 PIII800",
"mappingData" : {
"title" : "xyz"
},
"_id" : ObjectId("5640bdec1b9435dfgdf43554b"),
"abc" : "Toshiba Satellite Pro 4600 PIII800",
"mappingData" : {
"title" : "abc"
}
}
通过以下查询,我可以得到我需要的东西。但是1000万份文件需要2分钟的时间。请建议我提高查询效果。
var titles = db.collection.distinct("mappingData.title"),
titleVal = "Toshiba Satellite Pro 4600 PIII800",
query = { "$or": [] };
query["$or"] = titles.map(function (t){
var q = {};
q[t] = titleVal;
return q;
});
db.collection.find(query);
答案 0 :(得分:0)
在您的评论中,您提到在导入后使用映射数据更新数据。如果将title
值复制到标准化字段,例如{ "title": "Toshiba Satellite Pro 4600 PIII800" }
,则可以获得更好的性能。向此字段添加索引后,title
上的标准查找查询应该运行得更快。