2017-06-01 3 views
3

私はGoLangコードを持っている:GoLangのMgO - 検索のためのmgo.ErrNotFound(...)すべての(...)

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

selectQuery値は、ここでは重要ではありません。

私は決してエラーErrNotFoundを取得しません。クエリが結果と一致しない場合でも、私はErrNotFoundを取得しません。空の属性を持つ変数resultが得られます。 ErrNotFoundケースを処理するコードをどのように変更する必要がありますか?

答えて

5

Query.All()mgo.ErrNotFoundを返すことはありませんので、それを確認することは無意味です。

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するには、通常、これらにより、他の方法によって返さ/使用されているはず:結果がない場合はそれはあなたが場合はエラーがなかったことを検出することができる方法ですので、resultsの長さは、0になりますまたはQuery.Apply()などの単一のドキュメントで操作することができます。

+0

ありがとうございました。 興味深いのは、私がlen(結果)に対して0を得ることは決してないということです。クエリが結果と一致しない場合: [{Email:Name:}] 結果として、私のlen(結果)は1に等しくなります。 – poulius

+1

@poulius次に、 'Email'と' Name'のように空文字列を持っています(あるいは単にそれらのフィールドが見つからないか、または正しくマッピングされていない)。 – icza

+0

ああ申し訳ありません、はい、あなたは正しいです、私のselectQueryで何かがあります – poulius

関連する問題