gpt4 book ai didi

mongodb - 如何使用go和mongodb获取在另一个结构中定义的结构类型的 slice

转载 作者:行者123 更新时间:2023-12-01 21:09:34 25 4
gpt4 key购买 nike

mongodb集合

employee
{
_id:ObjectId(),
"emp_name":"qwert",
"emp_id":111,
"emp_dept":"XYZ"
}
{
_id:ObjectId(),
"emp_name":"asdfg",
"emp_id":121,
"emp_dept":"XYZ"
}
department{
_id:ObjectId(),
"dept_id":11,
"dept_name":"XYZ",
"description":"decs",
}
我的Go代码是
 type Employee struct {
EmployeeName string `json:"emp_name" bson:"emp_name"`
EmployeeID int `json:"emp_id" bson:"emp_id"`
EmployeeDept String `json:"emp_dept" bson:"emp_dept"`
EmpDepartment Department `json:"department" bson:"department"`
}
type Department struct {
DepartmentID int `json:"dept_id" bson:"dept_id"`
DepartmentName string `json:"dept_name" bson:"dept_name"`
Description string `json:"description" bson:"description"`
EmployeeList []Employee `json:"employee_list" bson:"employee_list"`
}

collection := session.DB("db").C("department")
pipeline := collection.Pipe([]bson.M{
{"$match": bson.M{
"dept_name": "xyz",
}},
{"$lookup": bson.M{
"from": "employee",
"localField": "dept_name",
"foreignField": "emp_dept",
"as": "employee_list",
}},
{"$unwind": "$employee_list"},
})

err = pipeline.One(&departmentEmployees)
它显示“员工明细”为空的部门详细信息
我想获取“XYZ”部门的部门信息,以及该部门内所有员工的 list 。
我已上传我的收藏和结构作为示例

最佳答案

您的Department结构具有EmployeeList []Employee字段,因此,如果您打算将聚合结果解码为Department值,则必须删除$unwind阶段。
这样的事情应该起作用:

collection := session.DB("db").C("department")
pipeline := collection.Pipe([]bson.M{
{"$match": bson.M{
"dept_name": "xyz",
}},
{"$lookup": bson.M{
"from": "employee",
"localField": "dept_name",
"foreignField": "emp_dept",
"as": "employee_list",
}},
})

var departments []*Department
err = pipeline.One(&departments)
另外您在 EmployeeDept String中有一个 Employee字段,我不知道您的 String类型是什么,也许只是 string吗?

关于mongodb - 如何使用go和mongodb获取在另一个结构中定义的结构类型的 slice ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63087542/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com