当前位置: 首页 > 面试题库 >

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

谈炳
2023-03-14
问题内容

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

在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

问题答案:

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"},
}


 类似资料:
  • 问题内容: 我想在管道中使用mgo在golang中运行以下查询。 我到处都看过,但是找不到这样的例子。我尝试了许多不同的组合,例如: 正确编译的,什么也找不到。有任何想法吗? 先感谢您 问题答案: 您的mongo查询可以转换为以下内容: 该查询应等效于mongo控制台中的以下内容: 如果您希望使用无序列图,则可能是这样的:

  • 本文主要介绍 Go语言中的各种运算符的使用以及其优先级的比较。Go 语言中运算符分为下面几大类: 算数运算符; 关系运算符; 逻辑运算符; 位运算符; 复制运算符。 下面我们就来一一看下这几种运算符如何使用。 1. Go 语言的算数运算符 Go语言中的算数运算符如表所示: 运算符 结合性 描述 + 从左到右 运算符左边的实体加上右边的实体 - 从左到右 运算符左边的实体减去右边的实体 * 从左到右

  • 运算符用于在程序运行时执行数学或逻辑运算。 Go 语言内置的运算符有: 算术运算符 关系运算符 逻辑运算符 位运算符 赋值运算符 其他运算符 接下来让我们来详细看看各个运算符的介绍。 算术运算符 下表列出了所有Go语言的算术运算符。假定 A 值为 10,B 值为 20。 运算符 描述 实例 + 相加 A + B 输出结果 30 - 相减 A - B 输出结果 -10 * 相乘 A * B 输出结果

  • 问题内容: 最近我在玩Google的新编程语言Go 并想知道为什么赋值运算符在等号前面有一个冒号 ?语言的作者为什么要使用而不是 问题答案: 该符号既用作声明,又用作初始化。 相当于 您可能会问,为什么不像只使用任何脚本语言一样使用?好吧,那是为了避免错别字。

  • 运算符是用来在程序运行时执行数学或逻辑运算的,在Go语言中,一个表达式可以包含多个运算符,当表达式中存在多个运算符时,就会遇到优先级的问题,此时应该先处理哪个运算符呢?这个就由Go语言运算符的优先级来决定的。 比如对于下面的表达式: var a, b, c int = 16, 4, 2 d := a + b*c 对于表达式 ,如果按照数学规则推导,应该先计算乘法,再计算加法; 的结果为 8, 的结

  • 我对Perl非常陌生,希望创建一种具有优先使用新的Perl 6语法功能的运算符的域特定语言。例如以正确的方式解析“1 2*6”。 到目前为止,我所找到的文档(例如本文)还没有针对具有优先声明的运算符的语法规则的示例。 我有一个非常简单的例子 这给了我 我只想构造一个抽象语法树。