それは一種の愚かな構文エラーであり、たくさんの方法を試しましたが、うまくいきませんでした。誰か助けてください。
GoのMongoDBとmgo
、$ne
演算子の使用を単純化しようとしましたが、以下のようなコードですが、コンパイル構文エラーが発生し続けました。
line 15: convIter := Session.Copy().DB("").C("convs").Find(bson.M {
line 16: "conversationStatus": interface{} {
line 17: bson.M {
line 18: "$ne": "DESTROYED"
line 19: },
line 20: },
line 21: }).Iter()
カンマを追加しようとしました,
どこでもカンマを削除しましたが、機能しませんでした。常に次のようなコンパイル構文エラーが発生しました。
mongodb/query.go:16: syntax error: unexpected {, expecting comma or }
mongodb/query.go:20: syntax error: unexpected }, expecting expression
mongodb/query.go:21: syntax error: unexpected }, expecting expression
bson.M
はマップタイプであるため、bson.M{ ... }
は マップリテラル です。キーと値のペアが複数の行に書き込まれる場合、それぞれがコンマで終わる必要があります。詳細については、 Golangで長いコード行を分割する方法 を参照してください。
また、「インターフェイス」リテラルはありません。削除してください。 interface{}
型の値は、bson.M
値を含む任意の値を保持/ラップできます。また、interface{}
値の作成は自動的に行われるため、型 conversion も必要ありません。
正しい構文:
convIter := Session.Copy().DB("").C("convs").Find(bson.M{
"conversationStatus": bson.M{
"$ne": "DESTROYED",
},
}).Iter()
同様に、 bson.D
タイプ(スライス)を使用する場合、リテラルの閉じ括弧で終わらない行は、コンマで終わる必要があります。例:
d := bson.D{
{Name: "fieldA", Value: 1},
{Name: "fieldB", Value: "running"},
}