Как сделать логическое И в запросе мангуста findOne?

У меня возникла проблема с логической операцией И в функции findOne мангуста.

Дата, предоставленная этой функции, верна, я проверял и регистрировал результат. Я все еще получаю ИЛИ вместо операции И.

static checkAvaiable(date, time, number) {
    return new Promise((resolve, reject) => {
        console.info(date, time)
        TableModel.findOne({
            $and: [
                {
                    'reservations.date': date,
                    'reservations.time': time,
                    number
                }
            ]
        }, { 'reservations.$': 1 }, (err, result) => {

            if (result.reservations.length != 0) {
                reject()
            }

            if (err) {
                reject()
            }
            resolve()
        })
    })
}

🤔 А знаете ли вы, что...
JavaScript можно использовать для создания видеоигр, как 2D, так и 3D, с использованием библиотеки Three.js.


2
737
1

Ответ:

Решено

Вы неправильно используете оператор $and, обратитесь к документы. при этом кажется, что вам вообще не нужно будет использовать оператор $and. вы можете просто фильтровать свои аргументы, поведение по умолчанию - использовать логику and.

static checkAvaiable(date, time, number) {
    return new Promise((resolve, reject) => {
        console.info(date, time)
        TableModel.findOne({
            $and: [
                {
                    'reservations.date': date
                },
                {
                    'reservations.time': time
                },
                {
                    number
                }
            ]
        }, { 'reservations.$': 1 }, (err, result) => {

            if (result.reservations.length != 0) {
                reject()
            }

            if (err) {
                reject()
            }
            resolve()
        })
    })
}