Причина, по которой оно не работает для вас, заключается в том, что поле fields._id
не экспортируется, и поэтому никакой другой пакет не может получить к нему доступ (только декларирующий пакет).
Вы должны использовать экспортируемое имя поля (начинается с заглавной буквы), например ID
и используйте теги struct , чтобы сопоставить его с полем MongoDB _id
следующим образом:
type fields struct {
ID int `bson:"_id"`
}
А теперь для выполнения запроса с использованием проекции:
projection := fields{
ID: 0,
}
result := staCon.collection.FindOne(
nil, filter, options.FindOne().SetProjection(projection)).Decode(s)
Обратите внимание, что вы также можете использовать bson.Document
в качестве проекции, вам не нужен ваш собственный тип структуры. Например. следующее делает то же самое:
projection := bson.NewDocument(
bson.EC.Int32("_id", 0),
)
result := staCon.collection.FindOne(
nil, filter, options.FindOne().SetProjection(projection)).Decode(s)