Прежде чем я изучил язык 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)
}
}