Проблема связана с вашей строкой регулярных выражений. Чтобы соответствовать любому строковому значению, вы должны использовать этот шаблон (соответствует любой строке): (.*?)
Рассмотреть входные документы:
{ _id: 1, name: "John", category: "cat 1", payment_type: "cash" },
{ _id: 2, name: "Jane", category: "cat 2", payment_type: "credit card" }
Использование для сопоставления с любым значением поля category
:
let categoryStr = /(.*?)/
db.exp.find( { category: categoryStr } )
Запрос возвращает все документы.
Итак, в вашем приложении для значения category
, не указанного, код может выглядеть следующим образом:
if (category is empty or null) { // category not specified by user
categoryStr = /(.*?)/
}
Точно так же и для поля payment_type
.
Тогда запрос будет выглядеть следующим образом:
db.exp.find( {
username: usernameStr,
category: categoryStr,
payment_type: paymentStr
} )
ПРИМЕЧАНИЕ. Код хорошо тестируется с API-интерфейсами драйвера MongoDB NodeJS.