一尘不染

Go中的MongoDB与mgo,带有bson.M / bson.D的运算符始终出现语法错误

go

这是一种愚蠢的语法错误,尝试了很多方法,但无法正常工作,请有人帮忙。

在Go with中的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

阅读 863

收藏
2020-07-02

共1个答案

一尘不染

bson.M是一个地图类型,所以bson.M{ ... }是一个地图字面。如果键值对写在多行中,则每行必须以逗号结尾。

也没有“接口”文字,将其删除。interface{}类型的值可以保存/包装任何值,包括bson.M值。并且interface{}值创建是自动的,您甚至不需要类型转换

正确的语法:

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"},
}
2020-07-02