Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用golang实现多条件mongo查询中的问题_Javascript_Arrays_Mongodb_Go_Mgo - Fatal编程技术网

Javascript 使用golang实现多条件mongo查询中的问题

Javascript 使用golang实现多条件mongo查询中的问题,javascript,arrays,mongodb,go,mgo,Javascript,Arrays,Mongodb,Go,Mgo,我有一份文件如下- { "_id" : "580eef0e4dcc220df897a9cb", "brandId" : 15, "category" : "air_conditioner", "properties" : [ { "propertyName" : "A123", "propertyValue" : "A123 678" }, {

我有一份文件如下-

{ 
    "_id" : "580eef0e4dcc220df897a9cb", 
    "brandId" : 15, 
    "category" : "air_conditioner", 
    "properties" : [
        {
            "propertyName" : "A123", 
            "propertyValue" : "A123 678"
        }, 
        {
            "propertyName" : "B123", 
            "propertyValue" : "B123 678"
        }, 
        {
            "propertyName" : "C123", 
            "propertyValue" : "C123 678"
        }
    ]
}
在这种情况下,
属性
数组可以有多个元素。 当我通过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"`
}
我还可以对各种属性执行mongodb
$和
操作,并且只有当所有属性都匹配时,才会返回文档。 这里的问题是
properties
数组中的元素数量不是固定的。 我需要能够发送

{ 
    "brandId" : 15, 
    "category" : "air_conditioner", 
    "properties" : [
        {
            "propertyName" : "A123", 
            "propertyValue" : "A123 678"
        }
    ]
}
并检索所有匹配的文档(而不仅仅是一个)

我试着根据作为输入接收的
属性
数组的大小,使用for循环创建一个可变大小的
bson.M
,但没有找到正确的方法


应该如何实现这一点?

我能够通过分别构建
$和
部分来实现这一点-

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})