我正在使用mgo库在golang中构建一个bson地图。我想重构一些代码,以避免重复。
考虑一下:
bson.M {
"$match" : bson.M{
"xyz" : "abc",
},
"$id_1" : value_1,
}
和另一个类型的bson地图:
bson.M {
"$match" : bson.M{
"xyz" : "abc",
},
"$id_2" : value_2,
}
如果将value_1为空字符串或value_2为空字符串,我如何将两者(从函数构建bson.M并返回,value1 / 2是params到此func)组合使用。
例如:如果我构建了以下函数。我的目的是通过调用buildBsonObject(" 123","")来构建第一种类型的map(见上文),并通过调用buildBsonObject来构建第二种类型("&#34) ;," 456")。
func buildBsonObject (value_1 string, value_2 string) {
return bson.M {
"$match" : bson.M{
"xyz" : "abc",
},
"$id_1" : value_1,
"$id_2" : value_2,
}
}
如果我执行以下操作(请参阅函数buildBsonObject),那么当value_1为空字符串时,我的mongo聚合查询将无效,因为它将视为id_1为"",而我打算只有我的bson对象中的id_2。
有关如何执行此操作的任何建议。感谢。
答案 0 :(得分:0)
这个怎么样:
func buildBsonObject(value_1 string, value_2 string) bson.M {
m := bson.M{
"$match": bson.M{
"xyz": "abc",
},
}
if value_1 != "" {
m["$id_1"] = value_1
}
if value_2 != "" {
m["$id_2"] = value_2
}
return m
}
另一种方法是将密钥名称传递给函数:
func buildBsonObject(k string, v string) bson.M {
return bson.M{
"$match": bson.M{
"xyz": "abc",
},
k: v,
}
}