Я полагаю, что mongodb - это то место, где будет сделано сопоставление. Кажется, вы пытаетесь вернуть все результаты обратно в свой собственный код, а затем сопоставить их сами в массиве. Возможно, вам будет проще попросить mongodb отфильтровать 10 лучших результатов поиска и затем отправить их прямо клиенту.
Самое лучшее в базах данных - то, что они могут выполнить эту фильтрацию для вас и быстро. И это должно выходить далеко за рамки других решений. Доверьтесь базе данных, весь смысл mongodb в том, что запрос должен быть невероятно быстрым и близким к скорости memcache. Вам просто нужно задать правильный вопрос. И я полагаю, что вы можете сильно ударить по базе данных, но убедитесь, что запрашиваете только точное количество совпадений, которые вы намереваетесь использовать.
Чтобы соответствовать Джону Сми ...
Может быть, что-то вроде этого (я просто придумал это, чтобы показать идею):
friendIdList // Предполагается, что это простой массив идентификаторов из вашего приложения
var matchFriends = db.people.find ({person_id: {$ in: friendIdList}, имя: / john smi. * / I}) .sort ({name: 1}) .limit (10);
См. Документы mongodb по запросам регулярных выражений
надеюсь, это поможет, я только изучаю mongodb, а не эксперта, но именно так я бы подошел к проблеме в других базах данных