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

时间:2017-03-02 11:51:58

标签: mongodb go bson mgo

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

带有mgo的Go中的MongoDB,我只是试图简化使用$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

1 个答案:

答案 0 :(得分:5)

bson.M是地图类型,因此bson.M{ ... }map literal。如果键值对以多行写入,则每个键都必须以逗号结尾。有关详细信息,请参阅How to break a long line of code in 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"},
}