2015-12-02 8 views
0

Я строю карту bson в golang, используя библиотеку mgo. Я хочу реорганизовать код, чтобы избежать дублирования.как создать карту 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 из функции и возврата, значение1/2 являются Params к этому func), который будет использоваться на основе 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), а затем, когда значение_1 пустая строка, моя агрегация Монго запрос не будет работать, так как он будет трактовать как ID_1 быть «», в то время как я намеревался только что ID_2 в мой объект bson.

Любые предложения о том, как это сделать. Благодарю.

ответ

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 
} 

playground example

Альтернативой передать имя ключа функции:

func buildBsonObject(k string, v string) bson.M { 
    return bson.M{ 
    "$match": bson.M{ 
     "xyz": "abc", 
    }, 
    k: v, 
    } 
} 

playground example

+0

спасибо за ваш ответ, это то, что я также думал, должно работать, но у меня была ошибка (до того, как я опубликовал это здесь), на самом деле у меня есть несколько уровней бсон-карт, где я сделал ошибку, и я думал, что это не будет работать так :( –

 Смежные вопросы

  • Нет связанных вопросов^_^