【问题标题】:How to query a mongoose returned value如何查询猫鼬返回值
【发布时间】:2019-09-29 09:35:09
【问题描述】:

我正在尝试查询从 mongoose 回调函数返回的值,但我得到的只是TypeError: #<Object> is not a function。我知道这样做可能并不容易,但是通过查询数据库的方式,我需要从返回的结果中更深入地研究,而不必再次调用 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) 但它仍然返回相同的错误,它不是一个函数.

【问题讨论】:

  • 这些星号 *suc*.find 是故意的,还是为了强调(不在您的实际代码中)?
  • @JackBashford 他们是为了强调,以便引起人们对正在谈论的回调的注意。
  • 错误在哪一行?请您指出来并发表评论好吗?
  • @JackBashford 抛出错误,就在 suc.find() 函数上,其他一切都正常工作。通常 suc 在对象数组中。

标签: javascript node.js object mongoose


【解决方案1】:

suc 将是发生错误的结果数组,这意味着如果您调用find,您将得到Array.prototype.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');
}

如果您想为 mongoose 调用 find,那么您必须在架构上定义它

User.method('find', function () {
    // do something
});

【讨论】:

  • 这是一个很好的进步,请您详细说明如何使用 mongoose 方法()进行归档,仍然是 mongodb 新手 :)
  • 取决于你想要做什么。洪加德的预期结果是什么?我认为您可能正在寻找的是User.find({admintit: 'admin', adminLimit: 200, admincycle: 0}...,而不是*suc*.find
  • 是的,但我真的不想再次调用 User 模型。我只想继续使用已经返回的值,或者我可以如何从猫鼬方法()中实现它
  • 我已更新我的答案,对已返回以查找管理员的用户使用 findfilter
  • 肯定有,标记为正确答案,开心>
猜你喜欢
  • 2018-03-07
  • 1970-01-01
  • 2023-03-21
  • 1970-01-01
  • 2018-11-28
  • 2018-05-26
  • 2017-12-03
  • 1970-01-01
  • 2022-11-22
相关资源
最近更新 更多