如何使用golang在mongodb中使用$ lookup获取计数值?

使用聚合,我使用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,

}

}

问题是: -我只需要countdata

data。在上面显示的输出中意味着在resultField其中显示数据,但是我只需要count像这样的值:-

"resultField":[2]但它正在显示数据。如何获得输出中数据的计数值。先感谢您。

回答:

因此,您的汇总实际上返回comment了该resultField字段中的所有文档,该文档隐含了结果的数量,您可以使用内置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版开始可用。

以上是 如何使用golang在mongodb中使用$ lookup获取计数值? 的全部内容, 来源链接: utcz.com/qa/426266.html

回到顶部