我有一个看起来像这样的元素:
{"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/