2017-06-01 95 views
3

我有一个GoLang代码:GoLang氧化镁 - mgo.ErrNotFound为查找(...)所有(...)

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

selectQuery价值在这里并不重要。我不会收到错误ErrNotFound。即使查询不符合任何结果,我也不会收到ErrNotFound。变量result具有空属性。如何更改代码以处理ErrNotFound大小写?

回答

5

Query.All()永远不会返回mgo.ErrNotFound,所以检查它是没有用的。如果没有业绩,results长度为0,那么这就是你如何检测如果没有任何错误:

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

谢谢你的回答。 有趣的是,我从来没有得到0的len(结果)。如果我的查询不符合我得到的任何结果: [{电子邮件:姓名:}] 因此,我的len(结果)等于1 – poulius

+1

@poulius然后可能你**做**有一个结果文档,其空字符串作为它的Email和Name(或简单地说这些字段丢失或错误映射)。 – icza

+0

哦,对不起,是的,你说得对,我的selectQuery有一些东西 – poulius