raybet雷竞技下载-雷竞技app下载官方版苹果-raybet雷竞技app下载

  • 亚搏app下载
  • mongoDB是现在比较盛行的一个根据分布式文件存储的数据库,它是一个介于联络数据库和非联络数据库(NoSQL)之间的产品,对错联络数据库傍边功用最丰厚,最像联络数据库的。

    mongoDB介绍

    mongoDB是现在比较盛行的一个根据分布式文件存储的数据库,它是一个介于联络数据库和非联络数据库(NoSQL)之间的产品,对错联络数据库傍边功用最丰厚,最像联络数据库的。

    mongoDB中将一条数据存储为一个文档(document),数据结构由键值(key-value)对组成。 其间文档类似于咱们往常编程中用到的JSON目标。 文档中的字段值能够包含其他文档,数组及文档数组。

    mongoDB相关概念

    mongoDB中相关概念与咱们了解的SQL概念比照如下:

    MongoDB术语/概念阐明比照SQL术语/概念database数据库databasecollection调集tabledocument文档rowfield字段columnindexindex索引primary key主键 MongoDB主动将_id字段设置为主键primary key

    macOS渠道除了在该网页下载TGZ文件外,还能够运用Homebrew装置。

    更多装置细节能够参阅官方装置教程,里边有Linux、macOS和Windows三大干流渠道的装置教程。

    mongoDB根本运用

    发动mongoDB数据库

    Windows

    "C:\Program Files\MongoDB\Server\4.2\bin\mongod.exe" --dbpath="c:\data\db"

    Mac

    mongod --config /usr/local/etc/mongod.conf

    brew services start mongodb-community@4.2

    发动client

    Windows

    "C:\Program Files\MongoDB\Server\4.2\bin\mongo.exe"

    Mac

    mongo

    数据库常用指令

    show dbs;:查看数据库

    > show dbs;
    admin 0.000GB
    config 0.000GB
    local 0.000GB
    test 0.000GB

    use q1mi;:切换到指定数据库,假如不存在该数据库就创立。

    > use q1mi;
    switched to db q1mi

    db;:显现当时地点数据库。

    > db;
    q1mi

    db.dropDatabase():删去当时数据库

    > db.dropDatabase();
    { "ok" : 1 }

    数据集常用指令

    db.createCollection(name,options):创立数据集

  • name:数据集称号
  • options:可选参数,指定内存大小和标签19索引。
  • > db.createCollection("student");
    { "ok" : 1 }

    show collections;:查看当时数据库中一切调集。

    > show collections;
    student

    db.student.drop():删去指定数据集

    > db.student.drop()
    true

    文档常用指令

    刺进一条文档:

    > db.student.insertOne({name:"小王子",age:18});
    {
    "acknowledged" : true,
    "insertedId" : ObjectId("5db149e904b33457f8c02509")raybet雷竞技下载-雷竞技app下载官方版苹果-raybet雷竞技app下载
    }

    刺进多条文档:

    > db.student.insertMany([
    ... {name:"张三",age:20},
    ... {name:"李四",age:25}
    ... ]);
    {
    "acknowledged" : true,
    "insertedIds" : [
    ObjectId("5db14c4704b33457f8c0250a"),
    ObjectId("5db14c4704b33457f8c0250b")
    ]
    }

    查询一切文档:

    > db.student.find();
    { "_id" : ObjectId("5db149e904b33457f8c02509"), "name" : "小王子", "age" : 18 }
    { "_id" : ObjectId("5db14c4704b33457f8c0250a"), "name" : "张三", "age" : 20 }
    { "_id" : Objeraybet雷竞技下载-雷竞技app下载官方版苹果-raybet雷竞技app下载ctId("5db14c4704b33457f8c0250b"), "name" : "李四", "age" : 25 }

    查询age>20岁的文档:

    > db.student.find(
    ... {age:{$gt:20}}
    ... )
    { "_id" : ObjectId("5db14c4704b33457f8c02标签2050b"), "name" : "李四", "age" : 25 }

    更新文档:

    > db.student.update(
    ... {name:"小王子"},
    ... {name:"老王子",age:98}
    ... );
    WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
    > db.student.find()
    { "_id" : ObjectId("5db149e904b33457f8c02509"), "name" : "老王子", "age" : 98 }
    { "_id" : ObjectId("5db14c4704b33457f8c0250a"), "name" : "张三", "age" : 20 }
    { "_id" : ObjectId("5db14c4704b33457f8c0250b"), "name" : "李四", "age" : 25 }

    删去文档:

    > db.student.deleteOne({name:"李四"});
    { "acknowledged" : true, "deletedCount" : 1 }
    > db.student.find()
    { "_id" : ObjectId("5db149e904b33457f8c02509"), "name" : "老王子", "age" : 98 }
    { "_id" : ObjectId("5db14c4704b33457f8c0250a"), "name" : "张三", "age" : raybet雷竞技下载-雷竞技app下载官方版苹果-raybet雷竞技app下载20 }

    指令真实太多,更多指令请参阅官方文档:shell指令和官方文档:CRUD操标签3作。

    Go言语操作mongoDB

    咱们这儿运用的是官方的驱动包,当然你也能够运用第三方的驱动包(如mgo等)。 mongoDB官方版的Go驱动发布的比较晚(2018年12月13号)。

    装置mongoDB Go驱动包

    go get github.com/mongodb/mongo-go-driver

    经过Go代码衔接mongoDB

    package main

    import (
    "context"
    "fmt"
    "log"

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

    func main() {
    // 设置客户端衔接装备
    clientOptions := options.Client().ApplyURI("mongodb://localhost:27017")

    // 衔接到MongoDB
    client, err := mongo.Connect(context.TODO(), clientOptions)
    if err != nil {
    log.Fatal(err)
    }

    // 查看衔接
    err = client.Ping(context.TODO(), nil)
    if err != nil {
    log.Fatal(err)
    }
    fmt.Println("Connected to MongoDB!")
    }

    衔接上MongoDB之后,能够经过下面的句子处理咱们上面的q1mi数据库中的student数据集了:

    // 指定获取要操作的数据集
    collection := client.Database("q1raybet雷竞技下载-雷竞技app下载官方版苹果-raybet雷竞技app下载mi").Collection("student")

    处理完使命之后能够经过下面的指令断开与MongoDB的衔接:

    // 断开衔接
    err = client.Disconnect(context.TODO())
    if err != nil {
    log.Fatal(err)raybet雷竞技下载-雷竞技app下载官方版苹果-raybet雷竞技app下载
    }
    fmt.Println("Connection to MongoDB closed.")

    BSON

    MongoDB中的JSON文档存储在名为BSON(二进制编码的JSON)的二进制表明中。与其他将JSON数据存储为简略字符串和数字的数据库不同,BSON编码扩展了JSON表明,使其包含额定的类型,如int、long、date、浮点数和decimal128。这使得应用程序更简单可靠地处理、排序和比较数据。

    衔接MongoDB的Go驱动程序中有两大类型表明BSON数据:D和Raw。

    类型D宗族被用raybet雷竞技下载-雷竞技app下载官方版苹果-raybet雷竞技app下载来简练地构建运用本地Go类型的BSON目标。这关于结构传递给MongoDB的指令特别有用。D宗族包含四类:

  • D:一个BSON文档。这种类型应该在次序重要的情况下运用,比方MongoDB指令。
  • M:一张无序的map。它和D是相同的,仅仅它不坚持次序。
  • A:一个BSON数组。
  • E:D里边的一个元素。
  • 要运用BSON,需求先导入下面的包:

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

    下面是一个运用D类型构建的过滤器文档的比如,它能够用来查找name字段与’张三’或’李四’匹配的文档:

    bson.D{{
    "name",
    bson.D{{
    "$in",
    bson.A{"张三", "李四"},
    }},
    }}

    Raw类型宗族用于验证字节切片。你还能够运用Lookup()从原始类型检索单个元素。假如你不想要将BSON反序列化成另一种类型的开支,那么这对错常有用的。这个教程咱们将只运用D类型。

    CRUD

    咱们现在Go代码中界说一个Studet类型如下:

    type Student struct {
    Name string
    Age int
    }

    接下来,创立一些Student类型的值,预备刺进到数据库中:

    s1 := Student{"小红", 12}
    s2 := Student{"小兰", 10}
    s3 := Student{"小黄", 11}

    刺进文档

    运用collection.InsertOne()办法刺进一条文档记载:

    insertResult, err :=标签11 collection.InsertOne(context.TODO标签11(), s1)
    if err != nil {
    log.Fatal(err)
    }

    fmt.Println("Inserted a single document: ", insertResult.InsertedID)

    运用collection.InsertMany()办法刺进多条文档记载:

    students := []interface{}{s2, s3}
    insertManyResult, err := collection.InsertMany(context.TODO(), students)
    if err != nil {
    log.Fatal(err)
    }
    fmt.Println("Inserted multiple documents: ", insertManyResult.InsertedIDs)

    更新文档

    updateone()办法答应你更新单个文档。它需求一个挑选器文档来匹配数据库中的文档,并需求一个更新文档来描绘更新操作。你能够运用bson.D类型来构建挑选文档和更新文档:

    filter := bson.D{{"name", "小兰"}}

    update := bson.D{
    {"$inc", bson.D{
    {"age", 1},
    }},
    }

    接下来,就能够经过下面的句子找到小兰,给他添加一岁了:

    updateResult, err := collection.UpdateOne(context.TODO(), filter, update)
    if err != nil {
    log.Fatal(err)
    }
    fmt.Printf("Matched %v documents and updated %v documentraybet雷竞技下载-雷竞技app下载官方版苹果-raybet雷竞技app下载s.\n", updateResult.MatchedCount, updateResult.ModifiedCount)

    查找文档

    要找到一个文档,你需求一个filter文档,以及一个指向能够将成果解码为其值的指针。要查找单个文档,运用collection.FindOne()。这个办法回来一个能够解码为值的成果。

    咱们运用上面界说过的那个filter来查找姓名为’小兰’的文档。

    // 创立一个Student变量用来接纳查询的成果
    var result Student
    err = collection.FindOne(context.TODO(), filter).Decode(&result)
    if err != nil {
    log.Fatal(err)
    }
    fmt.Printf("Found a single document: %+v\n", result)

    要查找多个文档,请运用collection.Find()。此办法回来一个游标。游标供给了一个文档标签14流,你能够经过它一次迭代和解码一个文档。当游标用完之后,应该封闭游标。下面的示例将运用options包设置一个约束以便只回来两个文档。

    // 查询多个
    // 将选项传递给Find()
    findOptions := options.Find()
    findOptions.SetLimit(2)

    // 界说一个切片用来存储查询成果
    var results []*Student

    // 把bson.D{{}}作为一个filter来匹配一切文档
    cur, err := collection.Find(context.TODO(), bson.D{{}}, findOptions)
    if err != nil {
    log.Fatal(err)
    }

    // 查找多个文档回来一个光标
    // 遍历游标答应咱们一次解码一个文档
    for cur.Next(context.TODO()) {
    // 创立一个值,将单个文档解码为该值
    var elem Student
    err := cur.Decode(&elem)
    if err != nil {
    log.Fatal(err)
    }
    results = append(results, &elem)
    }

    if err := cur.Err(); err != nil {
    log.Fatal(err)
    }

    // 完成后封闭游标
    cur.Close(context.TODO())
    fmt.Printf("Found multiple documents (array of pointers): %#v\n", results)

    删去文档

    最终,能够运用collection.DeleteOne()或collection.DeleteMany()删去文档。假如你传递bson.D{{}}作为过滤器参数,它将匹配数据会集的一切文档。还能够运用collection. drop()删去整个数据集。

    // 删去姓名是小黄的那个
    deleteResult1, err := collection.DeleteOne(context.TODO(), bson.D{{"name","小黄"}})
    if err != nil {
    log.Fatal(err)
    }
    fmt.Printf("Deleted %v documents in the trainers collection\n", deleteResult1.DeletedCount)
    // 删去一切
    deleteResult2, err := collection.DeleteMany(context.TODO(), bson.D{{}})
    if err != nil {
    log.Fatal(err)
    }
    fmt.Printf("Deleted %v documents in the trainers collection\n", deleteResult2.DeletedCount)

    看更多的go言语,重视VX大众号:studytogo

    声明:转载此文是出于李文周的博客的。如需转载,请注明出处,否则将追查法律责任。若有来历标示过错或侵犯了您的合法权益,请作者持权属证明与本网联络,咱们将及时更正、删去,谢谢。

    Write a Comment

    电子邮件地址不会被公开。 必填项已用 *标注