
tsov
07.05.2018
07:43:29

Nibbler
07.05.2018
07:44:34
gopkg.in/mgo.v2 - проблему накопал, передаю пустой интерфейс, а преобразование не делаю в структуру, теперь думаю как решить эту проблему. Есть вариант Сделать какой-то единый interface и работать с ним

tsov
07.05.2018
07:48:43
обрати внимание, что имена полей в базе получаются как lowercase к именам структуры го, если не указал тэг bson со своим именем

Google

Nibbler
07.05.2018
07:49:53

tsov
07.05.2018
07:50:16
нет, не обязательно

Nibbler
07.05.2018
07:50:30
ага видел. Обращал. ДУмал, что можно как-то сделать один метод, через который сохранять можно было бы.

tsov
07.05.2018
07:51:01
он принимает пустой интерфейс и разгребает его (докапывается до исходного значения) через рефлексию

Nibbler
07.05.2018
07:51:40
ну у меня сейчас:
BSON field 'insert.documents.0' is the wrong type 'array', expected type 'object'

tsov
07.05.2018
07:53:27
а ну ты слайс передал похоже
хотя не, там что то другое
покажи весь код

Nibbler
07.05.2018
07:54:14
ну получил json decode
потом …interface{} на save

tsov
07.05.2018
07:55:00
куда json decode? в intrrface{}? тогда там мапа будет

Nibbler
07.05.2018
07:55:33
item := model.ItemWrapper{}
err := decoder.Decode(&item)
err = mgo.Insert(&item.Data)
Insert(object ...interface{})
err = collection.Insert(*item)

Google

Nibbler
07.05.2018
07:55:38
сокращенно

tsov
07.05.2018
07:58:24
mgo.Insert это что?
базу создаешь?
3 и 4 строки не понял

Nibbler
07.05.2018
07:58:51
3 отправляю в метод схохранить в mongo

tsov
07.05.2018
07:59:06
в 5й надо collection.Insert(&item)

Nibbler
07.05.2018
07:59:07
4 в монге сохранение

tsov
07.05.2018
07:59:43

Nibbler
07.05.2018
08:00:26
// get object for add to collection
item := &object
// get session and collection
session, collection, err := c.urlCollection()
// check errors
if err != nil {
return err
}
// set data to collection
err = collection.Insert(&item)
// check errors
if err != nil {
fmt.Println(err.Error())
return err
}
// close session thred
defer session.Close()
return nil
весь метод

tsov
07.05.2018
08:02:14
по идее надо так: mgo.DB("database").Clone().Collection("coll").Insert(&item)

Nibbler
07.05.2018
08:02:43
urlCollection
// copy mongo session
session = c.session.Copy()
urlCollection = session.DB(DATABASE).C(COLLECTION)
collection.Insert(&item)
session.DB(DATABASE).C(COLLECTION).Insert(&item)
вся строка получается

tsov
07.05.2018
08:04:20
ну да все верно

Nibbler
07.05.2018
08:04:37
ага.
поменял с * на & ошибок нет и сохранения нет

tsov
07.05.2018
08:05:00
item может быть interface{}, тогда просто Insert(item)

Google

Nibbler
07.05.2018
08:05:05
даже bson

tsov
07.05.2018
08:05:38
чем проверяешь? смотри тулзой что лежит в базе

Nibbler
07.05.2018
08:06:06
тулзой смотрю
goland дебаггер
error = {error}
и все

Eugene
07.05.2018
08:06:37
В базе точно нету?

tsov
07.05.2018
08:06:42
не, я про содержимое базы
какой там док упал
в нее
в коллекцию

Nibbler
07.05.2018
08:07:07
даже коллекции нет

Nibbler
07.05.2018
08:07:35
до …interface{} работало. Создавало коллекцию если ее нет, решил порефачить.

tsov
07.05.2018
08:08:04
interface{} передай без &

Nibbler
07.05.2018
08:08:16
уже
mgo.Insert(&item.Data) - или про это?
без &

tsov
07.05.2018
08:10:12

Pawel
07.05.2018
08:13:42
пусть сделают драйвер jdbc чтобы в goland можно было её вертеть, тогда посмотрим на неё

Google

Alexey
07.05.2018
08:15:53

Nibbler
07.05.2018
08:16:50
там идет сохранение
err = collection.Insert(item) - тут убрал

Alexey
07.05.2018
08:19:23
есть tidb cockroachdb совместимы с драйвервами mysql и postgres соответственно

Denis
07.05.2018
08:23:11

Nibbler
07.05.2018
08:23:17
lf
да

Admin
ERROR: S client not available

Nibbler
07.05.2018
08:23:21
5 минут

Denis
07.05.2018
08:23:35
еще в col.Insert можно передать bson.M{
"key": item.Key
}

Nibbler
07.05.2018
08:27:43
отправляю в mgo:
&{ObjectIdHex("") true ads aa}
BSON field 'insert.documents.0' is the wrong type 'array', expected type 'object'
ошибка таже
{
"data": {
"schemeId" : "181",
"components" : [
{
"id":"181",
"ids" : [
{
"id": 10
}
],
"satCondition" : "sat",
"condition" : [
{
"params" : {
"comment" : "ololo",
"compare" : "djdj"
},
"leftCompare" : {
"select" : "asd",
"param" : 10
},
"rightCompare" : {
"select" : "asd",
"param" : 10
}
}
]
}
]
}
}

Denis
07.05.2018
08:28:56


Nibbler
07.05.2018
08:29:01
type DataComponents struct {
Data SchemeParams json:"data"
}
type SchemeParams struct {
Id bson.ObjectId json:"id" bson:"_id,omitempty"
SchemeId string json:"schemeId" bson:"schemeId"
Components []Component json:"components" bson:"components"
}
// Component structure
type Component struct {
Id string json:"id" bson:"id"
Ids []Ids json:"ids" bson:"ids"
SatCondition string json:"satCondition" bson:"staCondition"
Condition []Condition json:"condition" bson:"condition"
}
// number of blocks
type Ids struct {
Id int json:"id" bson:"id"
}
// condition block
type Condition struct {
CondBody []CondBody json:"conditionBody" bson:"conditionBody"
}
// condition body struct
type CondBody struct {
Params Parametrs json:"params" bson:"params"
LeftCompare Compare json:"leftCompare" bson:"leftCompare"
RightCompare Compare json:"rightCompare" bson:"rightCompare"
}
//params block of condition
type Parametrs struct {
Comment string json:"comment" bson:"comment"
Comp string json:"compare" bson:"compare"
}
// compare block of condition
type Compare struct {
Select string json:"select" bson:"select"
Param int json:"param" bson:"param"
}


Denis
07.05.2018
08:29:20
это ведь монговский ObjectID
?

Google

Nibbler
07.05.2018
08:29:30

Denis
07.05.2018
08:29:50
ты должен либо сгенерить айди у себя и передавать его монге

Nibbler
07.05.2018
08:29:51
а не надо ли его генерить вот в чем вопрос. Я что-то подобное делал сейас в другом месте гляну

Denis
07.05.2018
08:29:57
или вообще не передавать и позволить монге генерить
а ты передаешь вместо айдишника пустую строку. но почему сообщение об ошибке такое не знаю, странно

Nibbler
07.05.2018
08:30:24
ну закомментим да проверим
не-а ну пишет, что приходит массив, а ожидается объект

Denis
07.05.2018
08:38:35
надо весь код смотреть, чето запутанное. залей на https://play.golang.org/
и модели и как ее инициализируешь и как сохраняешь

tsov
07.05.2018
08:38:53

Nibbler
07.05.2018
08:38:57
а у нас же slice пришел

Denis
07.05.2018
08:39:16
в Insert можно и слайс передать вроде как

Nibbler
07.05.2018
08:39:18
так ака …interface{} это просто набор данныхъ
в виде слайса насколько помню
и надо преобразование делать в стрктуру

Denis
07.05.2018
08:39:37
чтобы сразу вставить много данных

tsov
07.05.2018
08:39:41
ну там в монге документ это документ, а не массив

Nibbler
07.05.2018
08:40:02
ага.
он так и говорит.

tsov
07.05.2018
08:40:09

Nibbler
07.05.2018
08:40:34
в виде мапы
надо еще раз перечитать. Спорить не буду поверю так.

tsov
07.05.2018
08:40:37
у тебя item должен успешно каститься в мапу или структуру