Как использовать элементы среза в bson.A с помощью mongo-go-driver 0.2.0 - PullRequest
0 голосов
/ 20 января 2019

Как использовать данный фрагмент для создания bson.A? Мне это нужно для выполнения динамических запросов.

Я обновляю версию mongo-go-driver alpha до бета-версии 0.2.0, и это стало серьезным изменением в моем проекте, поскольку API теперь другой.

https://godoc.org/github.com/mongodb/mongo-go-driver/bson

input := []string{"bar", "world"}
//expected output
bson.A{"bar", "world"}

Ответы [ 2 ]

0 голосов
/ 26 июля 2019

Не уверен, что вы когда-нибудь нашли свой ответ, но я боролся с этим в течение часа + вчера.

Я не уверен, что это решит то, что вы спрашиваете. Я предполагаю, что вы пытаетесь создать фильтр из вашего ввода. В конечном итоге я не использовал bson.A, когда пытался передать массив.

Ситуация: Попытка создать фильтр и один из элементов bson.D - это массив.

Я думал Мне нужно было использовать bson.A.

Мое первоначальное предположение:

return bson.D{
  {"uuid", request.Uuid},
  {"action", request.Action},
  {"resource", bson.D{{"$in", bson.A{resourceStrings}}}},
}

, где resourceStrings - фрагмент строки.

Однако в конечном итоге это создаст фильтр, который выглядит как FILTER : [ {resource [{$in [[Orgs::Organizations::1 Orgs::Organizations::* Orgs::Organizations Orgs::*]]}]}]

* Обратите внимание, что метод $ in ищет здесь массив массивов.

То, что мы хотим, это: FILTER : [{uuid 80} {action UpdateOrganization} {resource [{$in [Orgs::Organizations::1 Orgs::Organizations::* Orgs::Organizations Orgs::*]}]}]

Если мы передадим массив строк, он будет работать ...

return bson.D{
  {"uuid", request.Uuid},
  {"action", request.Action},
  {"resource", bson.D{{"$in", bson.A{"Orgs::Organizations::1", "Orgs::Organizations::*", "Orgs::Organizations", "Orgs::*"}}}},
}

После некоторых проб и ошибок я обнаружил, что bson.D будет напрямую принимать массив.

в конечном итоге я решил проблему таким образом

return bson.D{
  {"uuid", request.Uuid},
  {"action", request.Action},
  {"resource", bson.D{{"$in", resourceStrings}}},
}

В буквальном смысле ваш пример - если вы просто пытаетесь упорядочить массив в bson. Попробуйте:

bson.A{input}

0 голосов
/ 24 января 2019

Итак, bson.A базовый тип []interface{},

Я мог бы просто использовать append, как кусочек

...