mongodb - 在 mgo 中查询字符串数组

标签 mongodb go mgo

我有一个看起来像这样的元素:

{"Name":"test name","DBType":0,"UserName":"test user","Password":"","Host":"test host","Port":"123","DBName":"test schema","Options":"test options","Groups":["test1"]}

我希望能够查询分配给特定组的数据源目录。

我的代码是:

var d []Source
q := bson.M{"Groups": bson.M{"$in": [1]string{groupName}}}
findErr := c.Find(q).All(&d)

但是 - 我没有收到错误也没有结果。

我也试过

q := bson.M{"Groups": groupName}

同样的结果。

//Source describes a data source
type Source struct {
    Name string
    DBType      uint
    UserName    string
    Password    string
    Host        string
    Port        string
    DBName      string
    Options     string
    Groups      []string
}

我卡住了 - 我很困惑!任何帮助表示赞赏。

更新 - 我试过了

{"Name":"test name"}

这将返回 0 个项目。然而,如果我设置为 nil,我会得到东西。

最佳答案

确保仔细检查文档字段名称的大小写。例如,如果在您的文档中有

{ "Groups": ["test1", "test2"] }

您还需要使用大写的G查询,如下所示:

query := bson.M{"Groups": groupName}

我认为这里的问题是您的文档中有小写的 groups

你的 mgo Struct但是 Groups 是大写的,mgo 会自动映射到小写的 groups 文档字段。因此,使用小写的 groups 字段名称进行查询将不会返回任何匹配项(但 query all 会返回)。如果是这种情况,您需要使用以下方式进行查询:

query := bson.M{"groups": groupName}

但是,如果您的文档字段名称首字母大写,那么您还需要指定 marshalling mapping如下:

type Source struct {
    Name     string   `bson:"Name"`
    DBType   uint     `bson:"DBType"`
    UserName string   `bson:"UserName"`
    Password string   `bson:"Password"`
    Host     string   `bson:"Host"`
    Port     string   `bson:"Port"`
    DBName   string   `bson:"DBName"`
    Options  string   `bson:"Options"`
    Groups   []string `bson:"Groups"`
}

关于mongodb - 在 mgo 中查询字符串数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45505723/

相关文章:

mongodb - Golang mongodb mgo 驱动 Upsert/UpsertId 文档

javascript - Angular 和 MongoDB,安全性?

php - MongoDB PHP 驱动程序安装 (OS X El Capitan)

security - 我需要哪些 MongoDB 用户权限才能将用户添加到新的/另一个 mongo 数据库?

mongodb - 我可以在 Kubernetes Statefulset 的 volumeClaimTemplate 中使用现有的 GCE 永久磁盘吗

java - Go 的并发 Java 示例

go - 扫描到 gorm 模型的结构

mongodb - 计算数组中元素的数量

GoLang - 遵循带有正文数据的 POST 请求的重定向

mongodb - 使用 mgo 管道功能时未完全检索数据