如何使用具有匹配属性的对象数组检索 mongo 文档
How to retrieve a mongo document with an array of objects that have matching attribute
我有一组用户文档,每个文档都有一组嵌入式客户端。数组中的每个对象都有一个 clientID。
我想在 clients 数组中使用客户端检索用户文档,该客户端的 clientID 与传递的 clientID 匹配。
但是我遇到的所有示例都只是检索对象而不是返回文档。我想使用 mgo 库来做到这一点
var results []model.Clients
err := db.C("users").Find(nil).Select(bson.M{"clients": bson.M{"$elemMatch":q }}).All(&results)
上面的returns只是一个客户端数组。但我想要一个用户数组。
[
{
"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": {
}
]
}
]
}
]
Query.Select()
enables selecting which fields should be retrieved for the results, not for specifying filter criteria. Filter criterial should be passed to Collection.Find()
.
var results []model.User
err := db.C("users").Find(bson.M{"clients": bson.M{"$elemMatch":q}}).All(&results)
您也可以使用"clients.clientID"
来指定clients
数组中的clientID
:
var results []model.User
err := db.C("users").Find(bson.M{"clients.clientID": "12"}).All(&results)
我有一组用户文档,每个文档都有一组嵌入式客户端。数组中的每个对象都有一个 clientID。
我想在 clients 数组中使用客户端检索用户文档,该客户端的 clientID 与传递的 clientID 匹配。
但是我遇到的所有示例都只是检索对象而不是返回文档。我想使用 mgo 库来做到这一点
var results []model.Clients
err := db.C("users").Find(nil).Select(bson.M{"clients": bson.M{"$elemMatch":q }}).All(&results)
上面的returns只是一个客户端数组。但我想要一个用户数组。
[
{
"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": {
}
]
}
]
}
]
Query.Select()
enables selecting which fields should be retrieved for the results, not for specifying filter criteria. Filter criterial should be passed to Collection.Find()
.
var results []model.User
err := db.C("users").Find(bson.M{"clients": bson.M{"$elemMatch":q}}).All(&results)
您也可以使用"clients.clientID"
来指定clients
数组中的clientID
:
var results []model.User
err := db.C("users").Find(bson.M{"clients.clientID": "12"}).All(&results)