在mgo中查询字符串数组

时间:2017-08-04 11:31:24

标签: 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"]}

我希望能够查询数据源的cataloug以查找分配给特定组的那些。

我的代码是:

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项。然而,如果我设置为零,我会得到东西。

1 个答案:

答案 0 :(得分:0)

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

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

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

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

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

您的mgo Struct却是大写Groupsmgo会自动映射到小写groups文档字段。因此,使用小写groups字段名称进行查询将不会返回任何匹配(但查询全部都会匹配)。如果是这种情况,则需要使用以下命令进行查询:

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