MongoDB の 安装与基本使用

安装 mongo

建议使用 docker直接一键安装

docker run --name mongo_zdp -p 27017:27017 -d mongo:latest

GUI工具,我使用过的有两个,一个是 navicate,一个是 nosqlbooster。下载地址如下
https://nosqlbooster.com/downloads

mysql 和 mogodb 名称的对比

mysql MongoDB
数据库 数据库
集合
字段
joins 嵌入文档或者链接

CRUD

创建数据库;直接切换数据库,如果没有对应的数据库,就会创建新的。

use school;
db.dropDatabase(); # 删除数据库

集合操作

db.createCollection("students", {}); # 创建集合
db.student.drop(); # 删除集合

往集合插入数据

db.students.insert({"name":"张山","age":18});

从集合中查找数据

db.student.find();
db.students.find().pretty(); # 使用格式化的方式,显示查询结果

查询数据

查询名字叫张山的

db.students.find({"name":"张山"}).pretty();

# 年龄叫张山,并且年龄为 18 岁的人。
db.students.find({"name":"张山","age":18}).pretty(); 

# 名字叫张山或者李四的人
db.students.find({$or:[{"name":"张山"},{"name":"李四"}]}).pretty(); 

# 年龄大于20岁,名字叫做张山或者李四的人
db.students.find({"age":{$gt: 20},$or:[{"name": "张山"}, {"name": "李四"}]}).pretty(); 

翻页和跳过

# 仅返回一条数据
db.students.find({"name":"张山"}).limit(1).pretty();

# 跳过一条数据后再进行查询
db.students.find({"name":"张山"}).limit(1).skip(1).pretty(); 

# 按照年龄正序排列
db.students.find({"name":"张山"}).sort({"age":1});

# 按照年龄逆序排列
db.students.find({"name":"张山"}).sort({"age":-1});

聚合函数

# 求平均年龄
db.students.aggregate([{$group:{_id:null,avgAge:{$avg:"$age"}}}]);

# 按照名字聚合以后,求平均年龄
db.students.aggregate([{$group:{_id:"$name",avgAge:{$avg:"$age"}}}]);

go语言操作mongdb

package main

import (
	"context"
	"log"

	"go.mongodb.org/mongo-driver/bson"
	"go.mongodb.org/mongo-driver/mongo"
	"go.mongodb.org/mongo-driver/mongo/options"
)

// 定义结构体
type Student struct {
	Name string
	Age  int
}

func NewMongoCli(ctx context.Context) *mongo.Client {
	clientOptions := options.Client().ApplyURI("mongodb://localhost:27017")
	client, err := mongo.Connect(ctx, clientOptions)
	if err != nil {
		log.Fatalln("初始化错误", err)
	}
	if err = client.Ping(ctx, nil); err != nil {
		log.Fatalln("连接错误", err)
	}
	log.Println("connected success")
	return client
}

func main() {
	// 创建连接
	ctx := context.Background()
	client := NewMongoCli(ctx)
	defer func() {
		client.Disconnect(ctx)
		log.Println("mongodb 连接断开")
	}()

	// 连接数据库
	collection := client.Database("school").Collection("students")
	// 插入数据
	collection.InsertOne(ctx, Student{
		Name: "郭靖",
		Age:  24,
	})
	log.Println("数据插入成功")

	// 读取结果到结构体中
	var s1 Student
	if err := collection.FindOne(ctx, bson.D{{Key: "name", Value: "张山"}}).Decode(&s1); err != nil {
		if err == mongo.ErrNoDocuments {
			log.Println("没有找到对应的数据集")
		}
		log.Fatalf("数据结果读取失败%s", err)
	}
	log.Println("数据读取成功", s1)
}
posted @ 2023-09-24 22:33  沧海一声笑rush  阅读(22)  评论(0编辑  收藏  举报