【问题标题】:GoLang mgo - mgo.ErrNotFound for find(...).All(...)GoLang mgo - mgo.ErrNotFound for find(...).All(...)
【发布时间】:2017-11-02 07:43:57
【问题描述】:

我有一个 GoLang 代码:

c.Find(selectQuery).All(&results)
if err == mgo.ErrNotFound {
// error handling
}

selectQuery 值在这里并不重要。

我从来没有收到错误ErrNotFound。即使查询与任何结果都不匹配,我也不会得到ErrNotFound。我得到具有空属性的变量result。我应该如何更改代码来处理ErrNotFound 的情况?

【问题讨论】:

    标签: mongodb go error-handling mgo


    【解决方案1】:

    Query.All() 永远不会返回 mgo.ErrNotFound,因此检查它是没有用的。如果没有结果,results 的长度将为 0,这样你就可以检测到 if 没有错误:

    err := c.Find(selectQuery).All(&results)
    if err != nil { {
        // error handling
        return
    }
    // If you must detect "not found" case:
    if len(results) == 0 {
        // No results
    }
    

    mgo.ErrNotFound 被其他方法使用/返回,通常是那些应该对单个文档进行操作的方法,例如Query.One()Query.Apply()

    【讨论】:

    • 感谢您的回答。有趣的是,我从来没有得到 0 的 len(results)。如果我的查询与我得到的任何结果都不匹配: [{Email: Name:}] 结果我的 len(results) 等于 1
    • @poulius 那么您可能确实有一个结果文档,它的EmailName 为空字符串(或者只是这些字段丢失或映射不正确) .
    • 哦,对不起,是的,你是对的,我的 selectQuery 有点问题
    猜你喜欢
    • 1970-01-01
    • 2018-04-16
    • 1970-01-01
    • 1970-01-01
    • 2014-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多