大家好,
我正在开展一个客户可以发送帐户停用请求的项目,作为管理员,我可以看到列表并在页面上停用它们,在同一页面上,我有一个搜索过滤器,按名称,电子邮件和电话号码进行过滤。我有一个集合来容纳客户和另一个集合来保存停用请求。我已经完成了列表部分作为其简单的选择查询但面临问题通过搜索过滤器获取列表,我在Go lang中有以下两个结构来获取记录:
type DeactivationRequest struct { Id int `json:"id" bson:"id"` Uid int `json:"uid" bson:"uid"` RequestTime int64 `json:"request_time" bson:"request_time"` Status int `json:"status" bson:"status"` Note string `json:"note" bson:"note"` } type User struct { Id int `json:"id" bson:"_id,omitempty"` FirstName string `json:"first_name,omitempty" bson:"first_name,omitempty"` LastName string `json:"last_name,omitempty" bson:"last_name,omitempty"` EmailId string `json:"email_id,omitempty" bson:"email_id,omitempty"` Password string `json:"password,omitempty" bson:"password,omitempty"` PhoneNumber string `json:"phone_number,omitempty" bson:"phone_number,omitempty"` AltPhoneNumber string `json:"alt_phone_number,omitempty" bson:"alt_phone_number,omitempty"` Status int `json:"status" bson:"status"` Role string `json:"role,omitempty" bson:"role,omitempty"` }
我遇到连接查询问题,无法根据我编写的搜索关键字获取记录。
result := []bson.M{} skip := 0 limit := 20 c := mongoSession.DB("database").C("deactivation_requests") pipe := c.Pipe([]bson.M{bson.M{"$match": bson.M{ "status" : 0 }}, bson.M{"$lookup": bson.M{ "localField" : "_id", "from" : "users", "foreignField" : "uid", "as" : "profile"}}, bson.M{"$unwind": "$profile"}, bson.M{"$skip": skip}, bson.M{"$limit": limit},}) err = pipe.All(&result) if err != nil { return result, err }
结果的预期格式如下:
这样做的最佳方式是什么?
提前致谢。
<table>
<tr>
<th>Name</th>
<th>Email</th>
<th>Phone Number</th>
<th>Note</th>
</tr>
<tr>
<td>Swati Sharma</td>
<td>swati@swatii.com</td>
<td>987-999-9999</td>
<td>I don't want my acount</td>
</tr>
<tr>
<td>James Black</td>
<td>james@jamess.com</td>
<td>999-999-3120</td>
<td>I don't want my acount</td>
</tr>
</table>
答案 0 :(得分:0)
您好
我找到了查询的答案。我尝试了以下代码,它适用于我。
result := []bson.M{} skip := 0 limit := 20 c := mongoSession.DB("database").C("deactivation_requests") pipe := c.Pipe([]bson.M{ bson.M{"$lookup": bson.M{ "localField" : "_id", "from" : "users", "foreignField" : "uid", "as" : "profile"}}, bson.M{"$unwind": "$profile"}, bson.M{"$match": bson.M{"$or": []bson.M{ bson.M{"profile.first_name":bson.RegEx{"(?i).*"+name+".*", "i"} }, bson.M{"profile.last_name": bson.RegEx{ "(?i).*"+name+".*", "i"} }, bson.M{"profile.email_id": bson.RegEx{"(?i).*"+name+".*", "i"} }, bson.M{"profile.phone_number": bson.RegEx{".*"+keyword+".*", "i"} }, bson.M{"profile.alt_phone_number": bson.RegEx{".*"+keyword+".*", "i"} }, }}}, bson.M{"$skip": skip}, bson.M{"$limit": limit},}) err = pipe.All(&result) if err != nil { return result, err }