我在Mongodb中有数据集合,我想在我们的建议框中提供用户输入查询时提供最佳匹配建议,
当用户开始输入com
建议时应该是:
我在Node中排序,先从mongo获取所有匹配的数据然后给每个数据排序
function rank(name, q) {
var len = name.length,
lastIndex = -1;
for(var i = 0; i < q.length; i++) {
var n = name.indexOf(q[i], (lastIndex + 1));
if(n !== -1) {
len--;
lastIndex = n;
}
}
return len;
}
var query = 'com';
// giving rank to data
data = data.map(function(v) {
v.rank = rank(v.value, query);
return v;
});
// sorting by rank
data = data.sort(function(a, b) {
return a.rank - b.rank
});
它给了我满意的结果,但在处理大数据时会太慢。 我想让mongodb引擎处理排序,并给我有限的最佳匹配结果。
答案 0 :(得分:0)
也许你可以通过mapreduce
来做到这一点。 Map-reduce是一种数据处理范例,用于将大量数据压缩为有用的聚合结果。
var mapFn = function(){
var len = this.name.length,
lastIndex = -1;
var q = 'com';
for(var i = 0; i < q.length; i++) {
var n = this.name.indexOf(q[i], (lastIndex + 1));
if(n !== -1) {
len--;
lastIndex = n;
}
}
emit(len, this);
};
var reduceFn = function(key, values){
return values.sort(function(a,b){
return a.name - b.name;
});
};
db.collection.mapReduce(mapFn, reduceFn, { out: { reduce: 'result_collection'}});