我有一个用户文档集合,每个文档都有一个嵌入式客户端。数组中的每个对象都有一个clientID。
我想在clients数组中使用一个client来检索用户文档,该client具有与传递的clientID匹配的clientID。
但是我遇到的所有示例都只是检索对象而不是返回文档。我想使用mgo库做到这一点
var results []model.Clients
err := db.C("users").Find(nil).Select(bson.M{"clients": bson.M{"$elemMatch":q }}).All(&results)
以上仅返回一个客户数组。但是我想要一个用户数组。
[
{
"userID": "1",
clients: [
{
"clientID": "12",
"data": {},
"customers": [
"customerID": "0123",
"data": {
}
]
},
{
"clientID": "123",
"data": {},
"customers": [
"customerID": "0123",
"data": {
}
]
}
]
},
{
"userID": "2",
clients: [
{
"clientID": "12",
"data": {},
"customers": [
"customerID": "0123",
"data": {
}
]
},
{
"clientID": "13",
"data": {},
"customers": [
"customerID": "0123",
"data": {
}
]
}
]
}
]
答案 0 :(得分:1)
Query.Select()
使您可以选择应检索结果的字段,而不是指定过滤条件。过滤条件应该传递给Collection.Find()
。
var results []model.User
err := db.C("users").Find(bson.M{"clients": bson.M{"$elemMatch":q}}).All(&results)
您还可以使用"clients.clientID"
在clientID
数组中指定clients
:
var results []model.User
err := db.C("users").Find(bson.M{"clients.clientID": "12"}).All(&results)