使用聚合,我使用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]但它正在显示数据。如何获得输出中数据的计数值。先感谢您。
count
data
resultField
"resultField":[2]
因此,您的汇总实际上返回comment了该resultField字段中的所有文档,该文档隐含了结果的数量,您可以使用内置len()函数在Go中检查其中的长度。
comment
len()
由于您只需要长度(comment文档数),这就是为什么只想检索此数组的大小的原因。为此,您可以使用$addFields舞台resultField用一个数字替换该阵列的长度,以该阵列的长度。
$addFields
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版开始可用。
$project