Как удалить тот дополнительный ключ, который добавляется при преобразовании документов без схемы из пн go?
Вы можете просто определить имя отображения поля, которое будет сглаживаться при ранжированы. Например:
type Product struct {
ID primitive.ObjectID `bson:"_id"`
ProductId string `bson:"product_id"`
Others bson.M `bson:",inline"`
}
Когда вы декодируете документ, вы увидите, что он будет содержать другие поля без имени Others
. Например, если у вас есть документ:
{
"_id": ObjectId("5e8d330de85566f5a0557ea4"),
"product_id": "foo",
"some": "x",
"more": "y"
}
doc := Product{}
err = cur.Decode(&doc)
fmt.Println(doc)
// Outputs
// {ObjectID("5e8d330de85566f5a0557ea4") foo map[more:y some:x]}
Я не могу использовать что-то подобное, так как хочу преобразовать его в struct для работы с некоторыми свойствами
Вы можете использовать это непосредственно для предиката запроса. Например:
// After decoding 'doc' to product
var result bson.M
err := collection.FindOne(context.TODO(), doc).Decode(&result)
Протестировано с использованием MongoDB Go драйвера v1.3.2
ОБНОВЛЕНО:
Если вы хотел бы вернуть JSON, вы можете использовать bson.MarshalExt JSON () . Это также должно быть проще с точки зрения работы с объектами, которых нет в JSON. т.е. ObjectId. Например:
// After decoding 'doc' to product
ejson, err := bson.MarshalExtJSON(doc, true, false)
fmt.Println(string(ejson))