登录
首页 >  Golang >  Go问答

在 MongoDB 中如何查询具有匹配属性的对象数组

来源:stackoverflow

时间:2024-03-12 21:45:29 345浏览 收藏

一分耕耘,一分收获!既然都打开这篇《在 MongoDB 中如何查询具有匹配属性的对象数组》,就坚持看下去,学下去吧!本文主要会给大家讲到等等知识点,如果大家对本文有好的建议或者看到有不足之处,非常欢迎大家积极提出!在后续文章我会继续更新Golang相关的内容,希望对大家都有所帮助!

问题内容

我有一组用户文档,每个文档都有一个嵌入的客户端数组。数组中的每个对象都有一个 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 中如何查询具有匹配属性的对象数组》的内容就介绍到这里了,是不是学起来一目了然!想要了解更多关于的内容请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>