Комментарии 12
Писал, недавно свой такой, getOne мне кажется в моем случае более оптимизированный
Если интересно могу выложить в opensource, правда операций поменьше:
type Record struct {
Hello string `bson:"hello"`
}
record := new(Record)
err = mgoConnector.GetOne(TEST_COLLECTION, bson.M{
"hello": "test",
}, record)
fmt.Println((*record).Hello)
Если интересно могу выложить в opensource, правда операций поменьше:
type MongoConnector struct {
Connect func(mongoUrl string, databaseName *string) error
InsertOne func(collectionName string, entity interface{}) error
UpdateOne func(collectionName string, findPredicate bson.M, updatePredicate bson.M) error
UpdateAll func(collectionName string, findPredicate bson.M, updatePredicate bson.M) (*mgo.ChangeInfo, error)
GetOne func(collectionName string, findPredicate bson.M, structToDeserialize interface{}) error
GetAll func(collectionName string, findPredicate bson.M, structToDeserialize interface{}) error
DropCollection func(collectionName string) error
Disconnect func()
}
0
Хм, как, однако, много изменилось с альфы. Буквально пару месяцев назад(0.0.17) работа с bson вообще по-другому выглядела — использовалось куча
Рад, что все стало намного аккуратнее. Из хотелок — не появилось ли возможности оборачивать кастомные структуры в bson.D? Например, что бы можно было писать что-то наподобие
бойлерплейтных билдеров
.UpdateOne(nil,
bson.NewDocument(bson.EC.String("_id", access.UserID)),
bson.NewDocument(
bson.EC.SubDocumentFromElements("$addToSet",
bson.EC.SubDocumentFromElements("documents",
bson.EC.Array("$each", documents),
),
),
bson.EC.SubDocumentFromElements("$setOnInsert",
bson.EC.String("_id", access.UserID),
),
),
updateopt.Upsert(true),
)
Рад, что все стало намного аккуратнее. Из хотелок — не появилось ли возможности оборачивать кастомные структуры в bson.D? Например, что бы можно было писать что-то наподобие
partialUpdate := MyCustomStruct { Note: "New Note" }
update:= bson.D { {"$set" , &partialUpdate}}
filter := MyCustomStruct{ ID: "some-id" }
collection.UpdateOne(context.TODO(), filter, update)
0
Не понимаю зачем все время совать контекст везде? Какой смысл в это вкладывают создатели драйвера? Есть ли возможность не использовать его? Задать дефолтный?
0
Это сделано для возможности создания так называемого Graceful Shutdown. Не использовать его нельзя, но вы можете туда отправлять что-то вроде context.TODO(). Но лично мне проброс контекста очень нравится, потому что ошибки при окончании работы приложения сведутся к минимуму.
0
Я если честно все еще не понимаю как он связан с Graceful Shutdown. А проброс контекста требует в бизнес логике помимо коллекции принимать еще контекст, и так везде. Тот же mgo не требует контекста, в нем невозможен Graceful Shutdown? И где можно почитать про него? Беглое гугление не дало результатов.
0
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
MongoDB Go Driver туториал