Как запросить возвращаемое значение мангуста - PullRequest
0 голосов
/ 12 мая 2019

Я пытаюсь запросить значение, которое возвращается из функции обратного вызова mongoose, но все, что я получаю, это TypeError: #<Object> is not a function. Я знаю, что это может быть нелегко сделать, но в связи с тем, как я запрашиваю db, мне нужно глубже погрузиться из полученных результатов, без необходимости повторного вызова модели User. Я не знаю, есть ли способ обойти это.

 User.findOne({_id: req.user.id}, function(err,user){
        if(err){
            console.log(err);
        } else {
            if(user.plan == 'hit'){
                User.find({plan: 'hit', verified: 'yes'}).lean().exec(function(error,*suc*){
                    if(suc.length < 1){
                        console.log(error);
                        console.log('no user')
                    } else {
                        console.log(suc)

                        **Error throws up right below here**

                        *suc*.find({admintit: 'admin', adminLimit: 200, admincycle: 0}, function(errok,hungad){
                            if(errok){
                                console.log(err)
                            } else {
                                if(hungad.length < 1){
                                    console.log('no hung admin');
                                } else {
                                    console.log(hungad)
                                }
                            }
                        })
                    }
                })
            }
        }
    })

Действительно пытаюсь запросить результат обратного вызова suc , но все, что я получаю, это ошибка, я пытался преобразовать его в объект Object.assign({}, suc), но он все равно возвращает ту же ошибку, что это не функция.

1 Ответ

1 голос
/ 12 мая 2019

suc будет массивом результатов, в которых произойдет ошибка. Это означает, что если вы вызовете find, вы получите Array.prototype.find , а не mongoose find.

Если вы действительно хотите вызвать Array.prototype.find , предполагая, что объект выглядит следующим образом:

const suc = [{admintit: 'admin', adminLimit: 200, admincycle: 0}, ...]

Вы должны изменить его на:

const admin = suc.find(result => result.admintit === 'admin' && result.adminLimit === 200 && result.admincycle === 0)
if (admin) {
    console.log(admin)
} else {
    console.log('no hung admin');
}

Если вы хотите найти все, вы можете изменить find на filter:

const admins = suc.filter(result => result.admintit === 'admin' && result.adminLimit === 200 && result.admincycle === 0)
if (admins.length > 0) {
    console.log(admins)
} else {
    console.log('no hung admin');
}

Если вы хотели позвонить find для Мангуста, вам придется определить его в схеме

User.method('find', function () {
    // do something
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...