mongodb - 如何检索具有匹配属性的对象数组的 mongo 文档

标签 mongodb go mgo

我有一组用户文档,每个文档都有一个嵌入的客户端数组。数组中的每个对象都有一个 clientID。

我想在客户端数组中检索具有客户端的用户文档,该客户端的客户端 ID 与传递的客户端 ID 相匹配。

但是我遇到的所有示例都只是检索对象而不是返回文档。我想使用 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": {

                    }
                ]
            }
        ]
    }
]

最佳答案

Query.Select()允许选择应为结果检索哪些字段,而不是指定过滤条件。过滤条件应传递至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)

关于mongodb - 如何检索具有匹配属性的对象数组的 mongo 文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58766664/

相关文章:

javascript - FindOne() 可以返回记录,但无法使用 Node.js 的 MongoDB 聚合查询(id 的总记录)

ruby-on-rails - Mongoid Undefined method [] for nil :nilClass

sql-server - 如何为 GORM 关闭 IDENTITY_INSERT

go - 如何在 Perl 中编码的 Go 中对 Base64 进行 URL 安全解码?

mongodb - Golang 从 MongoDB 的嵌套 json 数据映射中找到一个值

javascript - 使用 Javascript 从 MongoDB 返回中提取值。

mongodb - 打印 MongoDB 集合数据 - GoLang,结果不符合预期

mongodb - 在使用 MongoDB 和 Golang 的查找引用中获取值

arrays - 从golang中的mongodb检索非结构化数组

javascript - Mongoose + Node.js : Async issue