Учитывая документ, подобный этому:
{
"text" : "cell phones"
}
Вы можете использовать оператор $where
следующим образом:
db.collection.find({
$where: function() {
return this.text.replace(' ', '') == "cellphones"
}
});
Я бы не рекомендовал это для больших коллекций (производительность может быть не очень хорошей). Однако даже при работе с большими коллекциями можно предположить, что можно добиться довольно неплохой производительности, добавив дополнительный фильтр в поле "text"
, чтобы отфильтровать все документы, которые не начинаются с правильных первых символов:
db.collection.find({
"text": { $regex: "^" + "cellphones".charAt(0) }, // this will use an index on the "text" field if available
$where: function() {
return this.text.replace(' ', '') == "cellphones"
}
});
Или, возможно, даже эта версия с еще одним фильтром в бите $where
, который проверяет длины строк на предмет уменьшенного числа сравнений строк:
db.collection.find({
"text": { $regex: "^" + "cellphones".charAt(0) }, // this will use an index on the "text" field if available
$where: function() {
return this.text.length >= "cellphones".length // performance shortcut
&& this.text.replace(' ', '') == "cellphones"
}
});