обновить элемент массива структуры с помощью mgo v2 (golang, mongoDB) - PullRequest
0 голосов
/ 07 июня 2019

У меня есть такие структуры:

type Meet struct {
    Title   string    `json:title`
    Time    time.Time `json:time`
    Host    string    `json:host`
    Crowd   []string  `json:crowd`
    Geo     Location  `json:location`
    Invoice []Bill    `json:invoice`
}

type User struct {
    ID         bson.ObjectId   `json:"id" bson:"_id,omitempty"`
    Name       string          `json:name`
    Phone      string          `json:phone`
    Email      string          `json:email`
    Vc         string          `json:vc`
    Status     int8            `json:status`
    Avatar     string          `json:avatar`
    FriendList []bson.ObjectId `json:friendlist`
    Meetings   []Meet          `json:meetings`
    Requests   []Request       `json:request`
}

и хотите обновить Счет-фактуру о встрече (например: User.Meetings [0]. Invoice) мой код выглядит так:

        query := bson.M{
            "_id":            bson.ObjectIdHex(personId),
            "Meetings.Title": Title,
            "Meetings.Geo":   Geo,
        }
        update := bson.M{
            "$set": bson.M{
                "Meetings.$.Invoice": updateInvoice,
            },
        }

        updateErr = collection.Update(query, update)

то, что я получил, было только не найдено error.commenting Meetings.Geo не помогло и вызвало ту же причину. Не найдено. что-то не так с моим запросом или как?

1 Ответ

0 голосов
/ 14 июня 2019

Поля в вашем запросе должны быть встречи: заголовки и встречи. Я только что проверил это с одной из моих БД, и дело в полях имеет значение. В вашем обновлении Встречи должны быть встречами. Имена берутся из имени тега struct item, а не из имени struct item. Например

struct test {
    ID bson.   bson.ObjectId `bson:"_id"`
    TestString string        `bson:"ts"`
    Amount     int           `bson:"am"`
}

query := bson.M{"ts": "test", "am": 2}

Вы не можете иметь пробел против _id, поскольку поле _id должно существовать.

...