【问题标题】:How to get the count value using $lookup in mongodb using golang?如何使用golang在mongodb中使用$lookup获取计数值?
【发布时间】:2018-05-15 13:58:36
【问题描述】:

使用聚合我正在使用 golang 加入两个 mongodb 集合。结果如下:-

输出:-

{
"response": {
    "code": 1,
    "api_status": 1,
    "message": "Success",
    "total_record": [
        {
            "_id": 1,
            "author_name": "mohit",
            "category": 232,
            "content": "This is the content",
            "date_time": 1524632713,
            "excerpt": "This is a  short text",
            "image": "pic.jpg",
            "resultField": [
                {
                    "_id": 6,
                    "comment": "this is a least comment",
                    "comment_on": 1524644601,
                    "email": "puneet@bookingkoala.com",
                    "name": "puneet",
                    "post_id": 1,
                    "reply_to": 1524644601,
                    "status": 1
                },
                {
                    "_id": 7,
                    "comment": "this is a least comment",
                    "comment_on": 1524647808,
                    "email": "puneet@bookingkoala.com",
                    "name": "puneet",
                    "post_id": 1,
                    "reply_to": 1524647808,
                    "status": 1
                }
            ],
            "status": 0,
            "tags": "this",
            "title": "how to do the code"
        },
        {
            "_id": 2,
            "author_name": "mohit",
            "category": 232,
            "content": "This is the content",
            "date_time": 1524632713,
            "excerpt": "This is a  short text",
            "image": "pic.jpg",
            "resultField": [
                {
                    "_id": 8,
                    "comment": "this is a least comment",
                    "comment_on": 1524648059,
                    "email": "puneet@bookingkoala.com",
                    "name": "puneet",
                    "post_id": 2,
                    "reply_to": 1524648059,
                    "status": 1
                }
            ],
            "status": 0,
            "tags": "this",
            "title": "how to do the code"
        },
        {
            "_id": 3,
            "author_name": "puneet",
            "category": 2,
            "content": "this is content",
            "date_time": 1524641086,
            "excerpt": "this is excerpt",
            "image": "pic.jpg",
            "resultField": [],
            "status": 1,
            "tags": "go",
            "title": "how to do the code"
        }
    ]
 }
}

这个输出是由下面的golang代码获取的:-

mongoSession := config.ConnectDb()
collection := mongoSession.DB(config.Database).C(config.BlogCollection)
pipeline := []bson.M{
    bson.M{"$match": bson.M{}},
    bson.M{"$lookup": bson.M{"from" : "comment", "localField" : "_id", "foreignField": "post_id","as": "resultField" }},
}
fmt.Println(pipeline)
pipe := collection.Pipe(pipeline)
resp := []bson.M{}
err = pipe.All(&resp)
if err != nil {
    fmt.Println("Errored: %#v \n", err)
}
fmt.Println(resp)
if err != nil {
    response = ResponseControllerList{
        config.FailureCode,
        config.FailureFlag,
        config.FailureMsg,
        nil,
        nil,
    }
} else {
    response = ResponseControllerList{
        config.SuccessFlag,
        config.SuccessFlag,
        config.SuccessMsg,
        nil,
        resp,
    }
}

问题是:- 我只需要data 中的count 不需要 data。如上所示的输出中的意思是 resultField 显示数据,但我只需要 count 值,如:- "resultField":[2] 但它显示数据。如何获取输出中数据的计数值。提前谢谢你。

【问题讨论】:

    标签: mongodb go mgo


    【解决方案1】:

    因此,您的聚合实际上会返回 resultField 字段中的所有 comment 文档,其中隐含包含结果的数量,它是您可以使用内置 len() 函数在 Go 中检查长度的切片。

    由于您只需要长度(comment 文档的数量),因此您只想检索此数组的大小。为此,您可以使用$addFields 阶段将resultField 数组替换为该数组长度的数字。

    pipe := c.Pipe([]bson.M{
        {
            "$lookup": bson.M{
                "from":         "comment",
                "localField":   "_id",
                "foreignField": "post_id",
                "as":           "resultField",
            },
        },
        {
            "$addFields": bson.M{
                "resultField": bson.M{"$size": "$resultField"},
            },
        },
    })
    

    请注意,$addFields 阶段等同于 $project 阶段,它明确指定输入文档中的所有现有字段并添加新字段。仅从 MongoDB 3.4 版开始可用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-26
      • 1970-01-01
      • 2019-06-19
      • 2017-08-21
      • 1970-01-01
      • 2019-10-24
      相关资源
      最近更新 更多