Операции CRUD в mongodb с использованием go

Go
Прежде чем я изучил язык go, я в основном использовал java и sql для работы с базой данных mysql в операции CRUD базы данных, но во время стажировки бизнес компании использовал mongodb После периода обучения я получил некоторую награду.

Кратко опишите реляционные базы данных, нереляционные базы данных

Реляционная база данных: относится к базе данных, которая использует реляционную модель для организации данных.
Реляционная модель относится к модели двумерных таблиц, а реляционная база данных — это организация данных, состоящая из двумерных таблиц и связей между ними.

нереляционная база данных

Нереляционная база данных: относится к нереляционной, распределенной и, как правило, не гарантируется следованиеACIDПринципы систем хранения данных.

Это относительно нормативное утверждение, конкретно нельзя сказать, кто из них лучше, а кто хуже, у каждого свои сценарии использования.

На самом деле можно примерно понять, что реляционная база данных в основном управляется с помощью операторов sql, а нереляционные данные обрабатываются ключом-значением.

(На самом деле, в моем понимании, нереляционная база данных - это не строго база данных, это должен быть набор методов структурированного хранения данных, которые могут быть документами или парами ключ-значение, но я не знаю, правильно ли это )

MongoDB

Что ж, выше я вкратце описал реляционные и нереляционные базы данных, а давайте поговорим о главных героях сегодняшней статьи.

mongodb

MongoDB хранит данные в виде документа, а структура данных состоит из пар ключ-значение (ключ=>значение). Документы MongoDB аналогичны объектам JSON. Значения полей могут содержать другие документы, массивы и массивы документов.

Таким образом, операции mongodb также выполняются в формате json (bson).



Итак, как работать с mongodb на языке go

(1) Подключение к базе данных

Соединение с базой данных в основном использует функцию Dial() в mgo. Форма подключения — mgo.Dial(url1, url2, url3). Конкретный код выглядит следующим образом:

func ConnecToDB() *mgo.Collection {
    session, err := mgo.Dial("127.0.0.1:27017")
    if err != nil {
        panic(err)
    }
    //defer session.Close()
    session.SetMode(mgo.Monotonic, true)
    c := session.DB("medex").C("student")
    return c
}

(2) Вставка

func InsertToMogo() {
    c := ConnecToDB()
    stu1 := Student{
        Name:  "xiaoming",
        Phone: "18933333333",
        Email: "12345678@qq.com",
        Sex:   "man",
    }
    stu2 := Student{
        Name:  "zhangdao",
        Phone: "8765432",
        Email: "133333384@qq.com",
        Sex:   "woman",
    }
    err := c.Insert(&stu1, &stu2)
    if err != nil {
        log.Fatal(err)
    }
}

(3) Запрос

func GetDataViaSex() {
    c := ConnecToDB()
    result := Student{}
    err := c.Find(bson.M{"sex": "woman"}).One(&result)
    if err != nil {
        log.Fatal(err)
    }
    fmt.Println("student", result)
    students := make([]Student, 20)
    err = c.Find(nil).All(&students)
    if err != nil {
        log.Fatal(err)
    }
    fmt.Println(students)

}

func GetDataViaId() {
    id := bson.ObjectIdHex("5a66a96306d2a40a8b884049")
    c := ConnecToDB()
    stu := &Student{}
    err := c.FindId(id).One(stu)
    if err != nil {
        log.Fatal(err)
    }
    fmt.Println(stu)
}

Выше использовались два метода запроса: один — запрашивать несколько объектов и возвращать несколько объектов:

Другой - запросить один и вернуть один объект: один

(4) Обновление

func UpdateDBViaId() {
    //id := bson.ObjectIdHex("5a66a96306d2a40a8b884049")
    c := ConnecToDB()
    err := c.Update(bson.M{"email": "12832984@qq.com"}, bson.M{"$set": bson.M{"name": "haha", "phone": "37848"}})
    if err != nil {
        log.Fatal(err)
    }
}

(5) удалить

func RemoveFromMgo() {
    c := ConnecToDB()
    _, err := c.RemoveAll(bson.M{"phone": "13480989765"})
    if err != nil {
        log.Fatal(err)
    }
}