Mongodb查找查询性能问题

时间:2015-11-24 12:08:00

标签: mongodb mongodb-query

我要求我需要搜索集合中动态的字段 示例如下图所示,我想搜索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);

1 个答案:

答案 0 :(得分:0)

在您的评论中,您提到在导入后使用映射数据更新数据。如果将title值复制到标准化字段,例如{ "title": "Toshiba Satellite Pro 4600 PIII800" },则可以获得更好的性能。向此字段添加索引后,title上的标准查找查询应该运行得更快。