前言整理不易,不要收藏吃灰,还要点赞支持
MongoDB是一个基于分布式文件存储的开源数据库系统,由C 语言编写。它旨在为WEB应用提供可扩展的高性能数据存储解决方案。MongoDB将数据存储为一个文档,数据结构由键值(key=>value)对组成,类似于JSON对象。MongoDB文档类似于JSON对象,字段值可以包含其他文档、数组及文档数组。
MongoDB是一个面向文档存储的数据库,操作起来比较简单和容易。可以在MongoDB记录中设置任何属性的索引来实现更快的排序。还可以通过本地或者网络创建数据镜像,这使得MongoDB有更强的扩展性。MongoDb使用update()命令可以实现替换完成的文档(数据)或者一些指定的数据字段。
总之,MongoDB适用于各种应用场景,无论是Web应用、移动应用还是大数据处理,都可以通过MongoDB来存储和查询数据。
选择时机总之,MongoDB适用于各种应用场景,无论是Web应用、移动应用还是大数据处理,都可以通过MongoDB来存储和查询数据。在选择MongoDB之前,需要考虑应用场景和需求,以确保选择正确的数据库类型。
MongoDB与Mysql的对比总的来说,MongoDB和MySQL都有各自的优点和适用场景。选择哪种数据库取决于具体需求,例如数据的大小、结构、扩展性、查询需求等等。如果需要处理大量数据,或者需要高并发的处理能力,或者需要存储非结构化和半结构化的数据,那么MongoDB可能更适合。如果需要保证数据的完整性和一致性,或者需要处理复杂的关系型数据,那么MySQL可能更适合。
MongoDB架构数据库
package main
import (
"context"
"fmt"
"log"
"time"
"go.mongodb.org/mongo-driver/mongo"
"go.mongodb.org/mongo-driver/mongo/options"
)
func main() {
// 设置MongoDB连接选项
clientOptions := options.Client().ApplyURI("mongodb://localhost:27017")
// 连接到MongoDB服务器
client, err := mongo.Connect(context.Background(), clientOptions)
if err != nil {
log.Fatal(err)
}
// 检查连接是否正常
err = client.Ping(context.Background(), nil)
if err != nil {
log.Fatal(err)
}
// 获取数据库对象
db := client.Database("mydb") // 创建名为"mydb"的数据库
// 创建集合对象,如果不存在则创建
collection := db.Collection("mycollection")
err = collection.Create(context.Background(), nil) // 创建名为"mycollection"的集合
if err != nil {
log.Fatal(err)
}
// 删除数据库(需要先关闭连接)
err = client.Disconnect(context.Background()) // 断开与MongoDB的连接
if err != nil {
log.Fatal(err)
}
}
集合
package main
import (
"context"
"fmt"
"log"
"time"
"go.mongodb.org/mongo-driver/mongo"
"go.mongodb.org/mongo-driver/mongo/options"
)
func main() {
// 设置MongoDB连接选项
clientOptions := options.Client().ApplyURI("mongodb://localhost:27017")
// 连接到MongoDB服务器
client, err := mongo.Connect(context.Background(), clientOptions)
if err != nil {
log.Fatal(err)
}
// 检查连接是否正常
err = client.Ping(context.Background(), nil)
if err != nil {
log.Fatal(err)
}
// 获取数据库对象
db := client.Database("mydb") // 创建名为"mydb"的数据库
// 创建集合对象,如果不存在则创建
collection := db.Collection("mycollection")
_, err = collection.Create(context.Background(), nil) // 创建名为"mycollection"的集合
if err != nil {
log.Fatal(err)
}
// 插入文档到集合中
document := bson.M{"name": "John", "age": 30} // 定义要插入的文档内容
_, err = collection.InsertOne(context.Background(), document) // 插入文档到集合中
if err != nil {
log.Fatal(err)
}
// 查询集合中的文档
var result bson.M // 定义结果变量,用于存储查询结果
err = collection.FindOne(context.Background(), bson.M{}).Decode(&result) // 查询集合中的所有文档,并将结果存储在result变量中中
if err != nil {
log.Fatal(err)
}
fmt.Println(result) // 输出查询结果
// 删除集合中的文档(需要先关闭连接)
err = collection.DeleteOne(context.Background(), bson.M{"name": "John"}) // 删除名称为"John"的文档,如果成功则返回nil,否则返回错误信息。如果需要删除所有文档,请使用DeleteMany()方法。如果要删除集合,请使用Drop()方法。要删除数据库,请使用DropDatabase()方法。要删除与集合相关的索引,请使用DropIndex()方法。要删除与数据库相关的用户,请使用DropUser()方法。要删除与数据库相关的角色,请使用DropRole()方法。要删除与数据库相关的角色集合,请使用DropAllRolesForDatabase()方法。要删除与数据库相关的用户集合,请使用DropAllUsersForDatabase()方法。要删除与数据库相关的索引集合,请使用DropAllIndexesForDatabase()方法。要删除与数据库相关的数据文件集合,请使用DropDataFileForDatabase()方法。要删除与数据库相关的命名空间集合,请使用DropAllNamespacesForDatabase()方法。要删除与数据库相关的复制集成员,请使用DropAllReplicaSetMembersForDatabase()方法。要删除与数据库相关的复制集,请使用DropAllReplicaSetsForDatabase()方法。要删除与数据库相关的副本集成员,请使用DropAllReplicaSetMembers()方法。要删除与数据库相关的副本集,请使用DropAllReplicaSets()方法。要删除与数据库相关的分片配置文件,请使用DropAllShardingConfigsForDatabase()方法。要删除与数据库相关的分片名称空
}
插入文档
package main
import (
"context"
"fmt"
"log"
"time"
"go.mongodb.org/mongo-driver/mongo"
"go.mongodb.org/mongo-driver/mongo/options"
)
func main() {
// 设置MongoDB连接选项
clientOptions := options.Client().ApplyURI("mongodb://localhost:27017")
// 连接到MongoDB服务器
client, err := mongo.Connect(context.Background(), clientOptions)
if err != nil {
log.Fatal(err)
}
// 检查连接是否正常
err = client.Ping(context.Background(), nil)
if err != nil {
log.Fatal(err)
}
// 获取数据库对象
db := client.Database("mydb") // 创建名为"mydb"的数据库
// 创建集合对象,如果不存在则创建
collection := db.Collection("mycollection")
_, err = collection.Create(context.Background(), nil) // 创建名为"mycollection"的集合
if err != nil {
log.Fatal(err)
}
// 定义要插入的文档内容
document := bson.M{"name": "张三", "age": 30}
// 插入文档到集合中
_, err = collection.InsertOne(context.Background(), document) // 插入文档到集合中
if err != nil {
log.Fatal(err)
}
}
查询文档
package main
import (
"context"
"encoding/json"
"fmt"
"log"
"time"
"go.mongodb.org/mongo-driver/mongo"
"go.mongodb.org/mongo-driver/mongo/options"
)
// 定义文档结构体
type Person struct {
Name string `json:"name"`
Age int `json:"age"`
Email string `json:"email"`
}
func main() {
// 设置MongoDB连接选项
clientOptions := options.Client().ApplyURI("mongodb://localhost:27017")
// 连接到MongoDB服务器
client, err := mongo.Connect(context.Background(), clientOptions)
if err != nil {
log.Fatal(err)
}
// 检查连接是否正常
err = client.Ping(context.Background(), nil)
if err != nil {
log.Fatal(err)
}
// 获取数据库对象和集合对象(需要先创建数据库和集合)
db := client.Database("mydb") // 创建名为"mydb"的数据库对象,如果数据库不存在则会被创建。可以使用 db.Create() 方法来创建数据库。在默认情况下,驱动程序会自动创建数据库,可以使用 options.Client().SetCreateIndexIfNotExists(true) 来设置自动创建索引。
collection := db.Collection("mycollection") // 创建名为"mycollection"的集合对象,如果集合不存在则会被创建。可以使用 collection.Create() 方法来创建集合。在默认情况下,驱动程序会自动创建集合,可以使用 options.Collection().SetCreateIndexIfNotExists(true) 来设置自动创建索引。
// 定义要查询的条件和投影(返回指定字段)
query := bson.M{"age": bson.M{"$gt": 18}} // 查询条件,这里是要找到年龄大于18的文档
projection := bson.M{"name": 1, "age": 1} // 投影,这里是返回name和age字段的值
options := options.Find().SetProjection(projection) // 设置查询选项,指定投影字段
// 执行查询操作(会返回多个文档)
cur, err := collection.Find(context.Background(), query, options) // Find方法用于查询多个文档(会返回多个文档)。如果不指定投影,默认返回所有字段。如果需要指定投影字段,可以使用 SetProjection() 方法设置投影字段。如果查询条件匹配到的文档数量超过了cursor批处理大小(默认值为20),MongoDB会分批返回结果,需要使用 cursor.NextBatch() 方法来获取所有的文档。cursor批处理大小可以在连接选项中设置cursorTimeoutMillis来更改。cursor批处理大小为0表示禁用批处理,这种情况下会一次性返回所有文档。cursor批处理大小的值会影响到查询性能和内存使用情况。cursor批处理大小默认值为0,表示禁用批处理。cursor批处理大小必须在连接选项中设置cursorTimeoutMillis才能生效。cursor批处理大小的值会影响到查询性能和内存使用情况。cursor批处理大小默认值为0,表示禁用批处理。cursor批处理大小必须在连接选项中设置cursorTimeoutMillis才能生效。cursor批处理大小的值会影响到查询性能和内存使用情况。cursor批处理大小默认值为0,表示禁用批处理。cursor批处理大小必须在连接选项中设置cursorTimeoutMillis才能生效。cursor批处理大小的值会影响到查询性能和内存使用情况。cursor批处理大小默认值为0,表示禁用批处理。cursor批处理大小必须在连接选项中设置cursorTimeoutMillis才能生效。cursor批处理大小的值会影响到查询性能和内存使用情况。cursor批处理大小默认值为0,表示禁用批处理。cursor批处理大小必须在连接选项中设置cursorTimeoutMillis才能生效。cursor批处理大小的值会影响到查询性能和内存使用情况。cursor批处理大小默认值为0,表示禁用批处理。cursor批处理大小必须在连接选项中设置cursorTimeoutMillis才能生效。cursor批处理大小的值会影响到查询性能和内存使用情况。cursor批处理大小默认值为0,表示禁用批处理。cursor批处理大小必须在连接选项中设置cursorTimeoutMillis才能生效。cursor批处理大小的值会影响到查询性能和内存使用情况。cursor批处理大小默认值为0,表示禁用批处理。cursor批处理大小必须在连接选项中设置cursorTimeoutMillis才能生效。cursor批处理大小的值会影响到查询性能和内存使用情况。cursor批
}
分页查询
package main
import (
"context"
"fmt"
"log"
"time"
"go.mongodb.org/mongo-driver/mongo"
"go.mongodb.org/mongo-driver/mongo/options"
)
type User struct {
Name string `json:"name"`
Age int `json:"age"`
Email string `json:"email"`
}
func main() {
// 设置MongoDB连接选项
clientOptions := options.Client().ApplyURI("mongodb://localhost:27017")
// 连接到MongoDB服务器
client, err := mongo.Connect(context.Background(), clientOptions)
if err != nil {
log.Fatal(err)
}
// 检查连接是否正常
err = client.Ping(context.Background(), nil)
if err != nil {
log.Fatal(err)
}
// 获取数据库对象和集合对象(需要先创建数据库和集合)
db := client.Database("mydb") // 创建名为"mydb"的数据库对象,如果数据库不存在则会被创建。可以使用 db.Create() 方法来创建数据库。在默认情况下,驱动程序会自动创建数据库,可以使用 options.Client().SetCreateIndexIfNotExists(true) 来设置自动创建索引。
collection := db.Collection("users") // 创建名为"users"的集合对象,如果集合不存在则会被创建。可以使用 collection.Create() 方法来创建集合。在默认情况下,驱动程序会自动创建集合,可以使用 options.Collection().SetCreateIndexIfNotExists(true) 来设置自动创建索引。
// 定义要查询的条件和投影(返回指定字段)
query := bson.M{"age": bson.M{"$gt": 18}} // 查询条件,这里是要找到年龄大于18的文档
projection := bson.M{"name": 1, "age": 1} // 投影,这里是返回name和age字段的值
options := options.Find().SetProjection(projection).SetSkip(10).SetLimit(5) // 设置查询选项,指定投影字段、跳过的文档数量和返回的最大文档数量
// 执行查询操作(会返回多个文档)
cur, err := collection.Find(context.Background(), query, options) // Find方法用于查询多个文档(会返回多个文档)。如果不指定投影,默认返回所有字段。如果需要指定投影字段,可以使用 SetProjection() 方法设置投影字段。如果查询条件匹配到的文档数量超过了cursor批处理大小(默认值为20),MongoDB会分批返回结果,需要使用 cursor.NextBatch() 方法来获取所有的文档。cursor批处理大小可以在连接选项中设置cursorTimeoutMillis来更改。cursor批处理大小为0表示禁用批处理,这种情况下会一次性返回所有文档。cursor批处理大小的值会影响到查询性能和内存使用情况。cursor批处理大小默认值为0,表示禁用批处理。cursor批处理大小必须在连接选项中设置cursorTimeoutMillis才能生效。cursor批处理大小的值会影响到查询性能和内存使用情况。cursor批处理大小默认值为0,表示禁用批处理。cursor批处理大小必须在连接选项中设置cursorTimeoutMillis才能生效。cursor批处理大小的值会影响到查询性能和内存使用情况。cursor批处理大小默认值为0,表示禁用批处理。cursor批处理大小必须在连接选项中设置cursorTimeoutMillis才能生效。cursor批处理大小的值会影响到查询性能和内存使用情况。cursor批处理大小默认值为0,表示禁用批处理。cursor批处理大小必须在连接选项中设置cursorTimeoutMillis才能生效。cursor批处理大小的值会影响到查询性能和内存使用情况。cursor批处理大小默认值为0,表示禁用批处理。cursor批处理大小必须在连接选项中设置cursorTimeoutMillis才能生效。cursor批处理大小的值会影响到查询性能和内存使用情况。cursor批处理大小默认值为0,表示禁用批处理。cursor批处理大小必须在连接选项中设置cursorTimeoutMillis才能生效。cursor批处理大小的值会影响到查询性能和内存使用情况。
}
更新文档
package main
import (
"context"
"fmt"
"log"
"time"
"go.mongodb.org/mongo-driver/mongo"
"go.mongodb.org/mongo-driver/mongo/options"
)
func main() {
// 设置MongoDB连接选项
clientOptions := options.Client().ApplyURI("mongodb://localhost:27017")
// 连接到MongoDB服务器
client, err := mongo.Connect(context.Background(), clientOptions)
if err != nil {
log.Fatal(err)
}
// 检查连接是否正常
err = client.Ping(context.Background(), nil)
if err != nil {
log.Fatal(err)
}
// 获取数据库对象和集合对象(需要先创建数据库和集合)
db := client.Database("mydb") // 创建名为"mydb"的数据库对象,如果数据库不存在则会被创建。可以使用 db.Create() 方法来创建数据库。在默认情况下,驱动程序会自动创建数据库,可以使用 options.Client().SetCreateIndexIfNotExists(true) 来设置自动创建索引。
collection := db.Collection("mycollection") // 创建名为"mycollection"的集合对象,如果集合不存在则会被创建。可以使用 collection.Create() 方法来创建集合。在默认情况下,驱动程序会自动创建集合,可以使用 options.Collection().SetCreateIndexIfNotExists(true) 来设置自动创建索引。
// 定义要更新的文档条件和更新操作(使用$inc操作符来增加年龄字段的值)
query := bson.M{"name": "张三"} // 更新条件,这里是要找到name为"张三"的文档
update := bson.M{"$inc": bson.M{"age": 1}} // 更新操作,这里是把age字段的值增加1
options := options.Update().SetUpsert(true) // 设置更新选项,如果找不到符合条件的文档则插入新的文档(upsert的意思是如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入)
// 更新文档(根据查询条件和更新操作来更新文档)
_, err = collection.UpdateMany(context.Background(), query, update, options) // UpdateMany方法用于更新多个文档(通过查询条件查出来的记录都会被更新)。如果不指定更新选项,默认情况下只会更新找到的第一条记录(multi设置为false)。如果需要更新多条记录,可以将multi设置为true。如果找不到符合条件的文档,不会插入新的文档。如果需要插入新的文档,可以将upsert设置为true。如果有多个可更新的文档,将返回一个 BulkWriteResult 类型的对象,可以使用其 GetModifiedCount() 方法获取被修改的文档数量。如果成功执行了更新操作,将返回一个 UpdateResult 类型的对象,可以使用其 GetMatchedCount() 方法获取匹配的文档数量,使用 GetModifiedCount() 方法获取被修改的文档数量。如果执行了批量更新操作,将返回一个 BulkWriteResult 类型的对象,可以使用其 GetModifiedCount() 方法获取被修改的文档数量。如果成功执行了批量更新操作,将返回一个 BatchResults 类型的对象,可以使用其 GetModifiedCount() 方法获取被修改的文档数量。如果执行批量更新时发生了错误,可以使用 BatchResults.HasError() 方法检查是否存在错误。如果存在错误,可以使用 BatchResults.GetError() 方法获取错误信息。可以通过 BatchResults.GetAllErrors() 方法获取所有错误信息。可以通过 BatchResults.HasMoreResults() 方法检查是否还有更多的结果可以处理。如果有更多的结果,可以使用 BatchResults.NextBatch() 方法获取下一个批量的结果。如果没有更多的结果可供处理,可以使用 BatchResults.HasMoreResults() 方法检查是否还有更多的结果可以处理。如果还有更多的结果可供处理,可以使用 BatchResults.NextBatch() 方法获取下一个批量的结果。如果没有更多的结果可供处理,可以使用 BatchResults.HasMoreResults() 方法检查是否还有更多的结果可以处理。如果还有更多的结果可供处理,可以使用 BatchResults.NextBatch() 方法获取下一个批量的结果。如果没有更多的结果可供处理,使用 BatchResults.HasMoreResults() 方法检查是否还有更多的结果可以处理。如果还有更多的结果可供处理,使用 BatchResults.NextBatch() 方法获取下一个批量的结果。如果没有更多的结果可供处理,使用 BatchResults.HasMoreResults() 方法检查是否还有更多的结果可以处理。如果还有更多的结果可供处理,使用 BatchResults.NextBatch() 方法获取下一个批量的结果。如果没有更多的结果可供处理,使用 BatchResults.HasMoreResults() 方法检查是否还有更多的结果可以处理。如果还有更多的结果可供处理,使用 BatchResults
}
索引
db.collection.createIndex({key: 1})
MongoDB支持存储过程。存储过程在MongoDB中可以用Javascript编写,并存储在db.system.js表中。
db.system.js.save(
{ _id: "addNumbers", value: function(x, y) { return x y; } }
)
db.eval("addNumbers(3,8)")
MongoDB的优势是什么
MongoDB将数据存储为对应的BSON格式文件,这个文件是二进制的,可以通过MongoDB提供的命令行工具进行读取和写入。BSON是Binary JSON的缩写,是JSON的一种扩展,能够更快地将数据存储和读取到MongoDB数据库中。
如何优化MongoDB查询性能通过使用索引、优化数据模型、编写高效的查询语句、使用聚合框架、分页查询、合理分配资源、调整MongoDB配置和使用驱动程序优化等方法,可以有效地优化MongoDB查询性能。
MongoDB支持哪些数据类型需要注意的是,MongoDB中的数据类型与关系型数据库中的数据类型不完全相同,有些类型是MongoDB特有的。此外,MongoDB还支持多种存储和索引选项,可以针对不同的应用场景选择合适的选项来优化查询性能。
在MongoDB中如何排序在MongoDB中,数据的排序操作使用“sort()”函数。语法为:db.COLLECTION_NAME.find().sort({KEY:1})。
db表示的是当前所在的数据集,而db后的COLLECTION_NAME则表示对哪一个数据表进行查询,find则是查询的关键词。而sort里面的两个参数分别表示的是按照哪一个字段去比较进行排序,后面的数字指的是升序排序还是降序排序。1就是升序排序,而-1则表示的是降序排序。
例如,对mycol这个表中字段title的数据进行查询,并按照title这个字段去决定排序的比较字段是什么,-1就是按照逆序排序。这样如果title里面的值由英文和数字的话则会按照字段的第一个字符以数字大于英文,英文从大到小的方式去决定查询出来的数据是怎么样的。
db.connectionName.find({key:value}).sort({columnName:1})
【申明:部分图片来源于网络,如侵权,联系删除】
Copyright © 2024 妖气游戏网 www.17u1u.com All Rights Reserved