使用mgo的Go中的MongoDB,使用bson.M/bson.D的运算符总是出现语法错误

lns*_*shi 8 go mongodb bson mgo

这是一种愚蠢的语法错误,尝试了很多方法,只是无法让它工作,有人请帮助.

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()
Run Code Online (Sandbox Code Playgroud)

试图在,任何地方添加逗号删除逗号,只是无法使其工作,总是得到如下编译语法错误:

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
Run Code Online (Sandbox Code Playgroud)

icz*_*cza 7

bson.M是一种地图类型,因此它bson.M{ ... }是一个地图文字.如果键值对以多行写入,则每个键都必须以逗号结尾.有关详细信息,请参阅如何在Golang中打破长行代码?

也没有"界面"文字,删除.interface{}type 的值可以保存/包装任何值,包括bson.M值.并且interface{}值创建是自动的,您甚至不需要类型转换.

正确的语法:

convIter := Session.Copy().DB("").C("convs").Find(bson.M{
    "conversationStatus": bson.M{
        "$ne": "DESTROYED",
    },
}).Iter()
Run Code Online (Sandbox Code Playgroud)

类似地,如果使用bson.D类型(它是一个切片),不以文字结束括号结尾的行必须以逗号结尾,例如:

d := bson.D{
    {Name: "fieldA", Value: 1},
    {Name: "fieldB", Value: "running"},
}
Run Code Online (Sandbox Code Playgroud)