Простые примеры CRUD для альфа-драйвера от MongoDB - PullRequest
0 голосов
/ 15 мая 2018

Я хочу протестировать драйвер Golang MongoDB от MongoDB (https://github.com/mongodb/mongo-go-driver, в настоящее время в альфа-состоянии).

Пример в документации к пакету (https://godoc.org/github.com/mongodb/mongo-go-driver/mongo) не очень помогает мне. Мне нужны простые (но полные) примеры основных операций CRUD.

Ответы [ 3 ]

0 голосов
/ 17 мая 2018

@ Стенни: Спасибо за подробные объяснения.Я уже видел упомянутые примеры, но они выглядят очень низкоуровневыми и не являются идиоматичными для меня.Итак, я пришел к следующему:

// Size defines the item size
type Size struct {
    H   int
    W   float64
    Uom string
}

// Item defines an item
type Item struct {
    OID  objectid.ObjectID `bson:"_id,omitempty"` // omitempty not working
    Item string
    Qty  int
    Tags []string
    Size Size
}

func main() {
    // connect to MongoDB
    client, err := mongo.Connect(context.Background(), "mongodb://localhost:27017", nil)
    if err != nil {
        log.Fatal(err)
    }
    db := client.Database("mongosample")
    inventory := db.Collection("inventory")

    // write document
    itemWrite := Item{Item: "canvas", Qty: 100, Tags: []string{"cotton"}, Size: Size{H: 28, W: 35.5, Uom: "cm"}}
    itemWrite.OID = objectid.New()
    fmt.Printf("itemWrite = %v\n", itemWrite)

    result, err := inventory.InsertOne(context.Background(), itemWrite)
    if err != nil {
        log.Fatal(err)
    }
    fmt.Printf("result = %#v\n", result)

    // read documents
    cursor, err := inventory.Find(
        context.Background(),
        bson.NewDocument(bson.EC.String("item", "canvas")),
    )
    if err != nil {
        log.Fatal(err)
    }
    defer cursor.Close(context.Background())

    itemRead := Item{}
    for cursor.Next(context.Background()) {
        err := cursor.Decode(&itemRead)
        if err != nil {
            log.Fatal(err)
        }
        fmt.Printf("itemRead = %v\n", itemRead)
    }
}

У меня нет необходимости контролировать ObjectID в приложении и я хочу, чтобы драйвер или база данных генерировали ID по требованию.Проблема здесь: я не смог найти способ опустить идентификатор.Это bson:"_id,omitempty" не работает.Это приводит к OID со всем установленным в ноль 'ObjectID ("000000000000000000000000")'.Может быть общая проблема, потому что ObjectID является массивом, а не срезом: тип ObjectID [12] байт

0 голосов
/ 27 мая 2019

Я написал такой код в своем недавнем проекте, и он работал хорошо.Прошу вас, пожалуйста, попробуйте.

К вашему сведению: я использую официальный Go - Mongo DB driver.

import "go.mongodb.org/mongo-driver/bson/primitive"

и

type Item struct {

    OID  primitive.ObjectID `json:"id,omitempty" bson:"_id,omitempty"`
    Item string
    Qty  int
    Tags []string
    Size Size
}
0 голосов
/ 15 мая 2018

Поскольку драйвер MongoDB Go в настоящее время является альфа-версией, документация все еще находится в стадии разработки.Тем не менее, вы можете найти примеры, предназначенные для документации, в репозитории GitHub драйвера: examples / documentation_examples / examples.go .В том же каталоге также есть тестовая система (examples-test.go), чтобы убедиться, что все примеры кода работают должным образом.

Если вы ищете examples.go для // Start Example, вы найдетефрагменты кода, отмеченные соответствующими // End Example.Нумерация примеров несколько непрозрачна, но на самом деле это стандартные ссылки, используемые для извлечения фрагментов кода драйвера для руководства MongoDB.

В частности, исходные примеры кода должны совпадать с блоками кода с вкладками в Операции MongoDB CRUD раздел руководства.

Использование func InsertExamples() в examples.go для иллюстрации:

В большинстве случаев порядок примеров кода должен соответствовать порядку блоков кода в документации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...