如何根据输入创建bson地图
how to create bson map based on input
我正在使用 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,
}
我如何将两者结合起来(从函数构建 bson.M 和 return,value1/2 是此函数的参数)以基于 if value_1 使用是空字符串或 value_2 是空字符串。
例如:如果我构建了以下函数。我的意图是通过调用 buildBsonObject("123","") 构建第一种类型的地图(见上文),通过调用 buildBsonObject("", "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。
有关如何执行此操作的任何建议。谢谢
这个怎么样:
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,
}
}
我正在使用 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,
}
我如何将两者结合起来(从函数构建 bson.M 和 return,value1/2 是此函数的参数)以基于 if value_1 使用是空字符串或 value_2 是空字符串。
例如:如果我构建了以下函数。我的意图是通过调用 buildBsonObject("123","") 构建第一种类型的地图(见上文),通过调用 buildBsonObject("", "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。
有关如何执行此操作的任何建议。谢谢
这个怎么样:
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,
}
}