如何使用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,
}
}
问题是: -我只需要count
的data
了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