Результат Golang mgo в простой срез

Я новичок в Go и MongoDB. Попытка выбрать одно поле из БД и сохранить его в срезе int безрезультатно.

userIDs := []int64{}

coll.Find(bson.M{"isdeleted": false}).Select(bson.M{"userid": 1}).All(&userIDs)

Приведенное выше выводит пустой фрагмент. Однако, если я создаю структуру с одним полем ID, которое является int64 с сортировкой, тогда она работает нормально.

Все, что я пытаюсь сделать, это работать с простым фрагментом, содержащим идентификаторы, которые мне нужны, вместо структуры с одним полем. Вся помощь приветствуется.


person RisingSun    schedule 02.12.2015    source источник
comment
Вы можете сделать это с помощью собственного клиента mongodb? вы можете не поддерживать клиент БД для выполнения многих вспомогательных функций. но вы можете сделать это с помощью простой функции для преобразования []struct в []int64.   -  person Jiang YD    schedule 02.12.2015


Ответы (1)


Поскольку запросы mgo возвращают документы, для достижения цели требуется несколько строк кода:

var result []struct{ UserID int64 `bson:"userid"` }
err := coll.Find(bson.M{"isdeleted": false}).Select(bson.M{"userid": 1}).All(&result)
if err != nil {
    // handle error
}
userIDs := make([]int64, len(result))
for i := range result {
    userIDs[i] = result.UserID
}
person Cerise Limón    schedule 02.12.2015
comment
Это то, что я в итоге использовал. Просто мне было странно писать это преобразование, и я хотел посмотреть, есть ли другой способ. Спасибо - person RisingSun; 02.12.2015