使用golang在具有多个条件的mongo查询中发出
Issue in mongo query with multiple conditions by using golang
我有一个文档如下-
{
"_id" : "580eef0e4dcc220df897a9cb",
"brandId" : 15,
"category" : "air_conditioner",
"properties" : [
{
"propertyName" : "A123",
"propertyValue" : "A123 678"
},
{
"propertyName" : "B123",
"propertyValue" : "B123 678"
},
{
"propertyName" : "C123",
"propertyValue" : "C123 678"
}
]
}
在这里,properties
数组可以有多个元素。当我通过API执行搜索时,理想情况下,我会在POST
请求的主体中传递一个类似于properties
的数组-
{
"brandId" : 15,
"category" : "air_conditioner",
"properties" : [
{
"propertyName" : "A123",
"propertyValue" : "A123 678"
},
{
"propertyName" : "B123",
"propertyValue" : "B123 678"
},
{
"propertyName" : "C123",
"propertyValue" : "C123 678"
}
]
}
我有一个结构体来接收和解码这个信息-
type Properties struct {
PropertyName string `json:"propertyName" bson:"propertyName"`
PropertyValue string `json:"propertyValue" bson:"propertyValue"`
}
type ReqInfo struct {
BrandID int `json:"brandId" bson:"brandId"`
Category string `json:"category" bson:"category"`
Properties []Properties `json:"properties" bson:"properties"`
}
我还可以对各种properties
执行mongodb $and
操作,只有当它们全部匹配时,才返回文档。这里的问题是properties
数组中的元素数量不固定。我需要能够发送
{
"brandId" : 15,
"category" : "air_conditioner",
"properties" : [
{
"propertyName" : "A123",
"propertyValue" : "A123 678"
}
]
}
并检索所有匹配的文档(不只是一个)。
我试着用for循环创建一个可变大小的bson.M
,这取决于接收到的properties
数组的大小作为输入,但无法得到正确的方法!
这应该如何处理?
我能够通过单独构建$and
部分来实现这一点-
var AndQuery []map[string]interface{}
for i := 0; i < len(body.Properties); i++ {
log.Println(body.Properties[i])
currentCondition := bson.M{"properties": bson.M{"$elemMatch": bson.M{"propertyName": body.Properties[i].PropertyName, "propertyValue": body.Properties[i].PropertyValue}}}
AndQuery = append(AndQuery, currentCondition)
}
然后我的查询看起来像-
c.Find(bson.M{"brandId": body.BrandID, "category": body.Category, "$and": AndQuery})
相关文章:
- 如何在 Meteor 中的 Mongo 查询中使用变量作为字段名称
- Meteor:在模板接受Mongo查询结果之前修改它的最佳实践
- Mongo 查询以从集合数组返回特定值
- Javascript 到 Mongo 查询 passthru.安全?不好的做法
- Mongo查询今天是否's的日期在另外两人之间
- 如何使用本机节点驱动程序在节点服务器上执行mongo查询字符串
- 嵌套字段中的Mongo查询
- Mongo查询没有't不包括我的筛选子句
- 复杂的Mongo查询,同时检查多个属性
- 简单的db-mongo查询出错
- 为什么我的Mongo查询不工作
- 使用golang在具有多个条件的mongo查询中发出
- 从客户端控制器指定Mongo查询参数(MEAN.JS)
- 我可以在mongo查询中索引对象吗?
- NodeJs:用另一个集合的结果过滤mongo查询结果
- 分离mongo查询的节点
- 在NodeJS中处理多个、顺序的、依赖的mongo查询结果的最佳方式
- Meteor 1.0 - 使用变量作为键的 Mongo 查询,包括$inc
- 如何基于 mongo 查询中止冗长的 nodejs 函数
- 按距离排序mongo查询