如何使用具有匹配属性的对象数组检索 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)