mgo $ all查询带数组的数组并且不区分大小写?

时间:2018-03-14 22:39:58

标签: mongodb go mgo

我有一系列成分名称是动态的,并按用户提供。我希望将其与mongo文档相匹配,其中array个对象名为ingredients,其中包含属性name。我写了一个查询(见下文),它将从URL获取查询参数,并将返回所有具有所有匹配成分名称的文档,但是这个搜索区分大小写,我希望它不是。

我已考虑将bson.RegExOption: "i"一起使用,但我不确定如何形成此查询或将其应用于字符串数组。

以下是区分大小写的查询:

// Check for ingredients, return all recipes that can be made using supplied ingredients
if qryPrms["ingredients"] != nil {
    mongodQ["ingredients.name"] = bson.M{"$all": qryPrms["ingredients"]}
}

mongodQ是我用于在代码中稍后查询集合的bson.M。理想情况下,我可以将RegEx应用于qryPrms["ingredients"]中的每个元素,这样它就会返回匹配的成分,例如cheese也会返回swiss cheese。在使用动态数组进行查询时,这也是一个更普遍的mongodb问题。

1 个答案:

答案 0 :(得分:0)

我能够使用for循环来构建slice类型bson.RegEx

if qryPrms["ingredients"] != nil {
        var ingRegEx []bson.RegEx
        for i := range qryPrms["ingredients"] {
            ingRegEx = append(ingRegEx, bson.RegEx{Pattern: qryPrms["ingredients"][i], Options: "i"})
        }
        mongodQ["ingredients.name"] = bson.M{"$all": ingRegEx}
    }