如何在猫鼬回调中读取查询?

Posted

技术标签:

【中文标题】如何在猫鼬回调中读取查询?【英文标题】:How do I read the query in a mongoose callback? 【发布时间】:2016-05-22 08:23:40 【问题描述】:

我的代码通过数组上的 .forEach() 循环运行。每次迭代都会运行一个 mongoose 查询。

我的查询返回一个空对象,这不应该发生,我想知道为什么!

我不能要求回调打印使用的值,因为在 promise 解决时 forEach 循环已经完成,所以它只打印数组的最后一项(这是预期的结果)。

如何访问在 mongoose 回调中运行的查询?

array.forEach((item,i)=>
    model.findOneAndUpdate(a:item.a,item).exec((err,result)=>
        if(err)throw(err.stack);return;

        if(!result)
            throw new Error("Nothing returned for query: "+QUERY_STRING)
    )
)

【问题讨论】:

【参考方案1】:

从此改变:

array.forEach((item,i)=>
    model.findOneAndUpdate(a:item.a,item).exec((err,result)=>
        if(err)throw(err.stack);return;

        if(!result)
            throw new Error("Nothing returned for query: "+QUERY_STRING)
    )
)

到这里:

array.forEach((item,i)=>
    (function (item, i) 
        model.findOneAndUpdate(a:item.a,item).exec((err,result)=>
            if(err)throw(err.stack);return;
            console.log(item, i);
            if(!result)
                throw new Error("Nothing returned for query: "+QUERY_STRING)
        )
    )(item, i)
)

【讨论】:

这很有意义。我仍在思考“任何东西都可以是函数”的 javascript 概念。

以上是关于如何在猫鼬回调中读取查询?的主要内容,如果未能解决你的问题,请参考以下文章

如何在猫鼬中查询多个集合

如何使用各种参数在猫鼬中进行搜索查询?

如何在猫鼬模式中使用异步默认值?

如何在猫鼬中执行“每个”查询

如何在猫鼬中使用聚合

在猫鼬预中间件中,我如何访问更新查询?