sudo docker pull mongo #拉取镜像
sudo docker run -itd --name mongo -p 27017:27017 mongo --auth #创建容器实例
docker exec -it mongo mongosh admin #进入容器,直接进入admin数据库
use admin //进入admin数据库
//创建用户:用户名为“yi”,密码为"123456,",用户属于admin数据库,并且拥有userAdminAnyDatabase,readWriteAnyDatabase权限,在所有数据库为管理员权限并且可读可写。
db.createUser({ user:'yi',pwd:'123456',roles:[ { role:'userAdminAnyDatabase', db: 'admin'},"readWriteAnyDatabase"]})
//登录
db.auth('yi','123456')
注意:通常一个用户只属于一个数据库,只对该数据库拥有权限。
Mongodb三大块:数据库(database)、集合(collection)、文档(document)。一个数据库中可以有多个集合,一个集合中可以有多个文档。
show dbs //展示所有数据库
show collections //展示所有集合
db.<collection>.find() //展示集合中的所有文档(document)
find查询返回的是一个数组,findOne返回对象可用.获取属性
db.<collection>.find() 查询collection中所有文档
db.<collection>.find({name:'yi'}) 根据指定条件查询collection中文档
db.<collection>.findOne() 查询符合条件的第一个文档
db.<collection>.find().countDocuments() 查询符合条件的文档数
db.<collection>.find({"hobby.address":"china"}) 查询嵌套文档
db.<collection>.find(num,{$gt:50}) 查询num>50
db.<collection>.find().limit(5) 只显示查询的前5条
db.<collection>.find().skip(5).limit(5) 查询6~10条数据
db.<collection>.find().sort({sal:1}) 按照sal升序排序
db.<collection>.find().sort({sal:-1}) 按照sal降序排序
db.<collection>.find().sort({sal:1,empno:-1}) 按照sal升序排序,empno降序排序
db.<collection>.find({}, {"userName":1,"_id":0}) 只查询userName字段,不显示_id
db.<collection>.insertone({name:'yi',age:18}); 插入一个对象
db.<collection>.insertmany([
{name:'yi',age:18},
{name:'liu'}
]); 插入n个对象
注意:插入时如果没有指定_id,则会为_id添加Object_id作为唯一标识。
updateOne只会修改符合条件的一个文档,updateMany会修改符合条件的所有文档
db.<collection>.updateOne({name:'liu'},{$set:{address:‘china’}}) 用操作符$set将符合条件的文档设立/更新address属性
db.<collection>.updateOne({name:'liu'},{$unset:{address:1}}) 用操作符unset将符合条件的文档address属性删除
db.<collection>.updateMany(筛选条件,修改操作) 案例同上
$push 向数组中加入,$addToSet 向集合中加入
更多操作符:Update Operators — MongoDB Manual
db.<collection>.replaceOne(筛选条件,替代对象)
db.<collection>.deleteOne(筛选条件)
db.<collection>.deleteMany(筛选条件)
db.<collection>.deleteMany({age:{$in:[1,2,3]}}) //删除age为1,2,3的文档
db.dropDatabase() 删除当前数据库
db.<collection>.drop() 删除当前集合
go get go.mongodb.org/mongo-driver/mongo
go get go.mongodb.org/mongo-driver/bson
client, err := mongo.Connect(context.TODO(), options.Client().ApplyURI("mongodb://yi:[email protected]:27017/?authSource=admin"))
if err != nil {
panic(err)
}
//检测连接是否成功
err = client.Ping(context.TODO(), nil)
if err != nil {
panic(err)
}
defer func() {
if err := client.Disconnect(context.TODO()); err != nil {
panic(err)
}
}()
testDb := client.Database("test", nil)
col := testDb.Collection("test")
//查询
cur, err := col.Find(context.Background(), bson.D{{"age", bson.D{{"$lt", 20}}}}, nil)
if err != nil {
panic(err)
}
type K struct {
Id string
Age int
Name string
}
k := K{}
for cur.Next(context.Background()) {
cur.Decode(&k)
fmt.Println(k)
}
//插入: insert({id:"10",age:66,name:"jjk"})
insertK := K{Id: "10", Age: 66, Name: "jjk"}
res, err := col.InsertOne(context.Background(), insertK, nil)
if err != nil {
panic(err)
}
fmt.Println(res.InsertedID)
//删除
res2, err := col.DeleteMany(context.Background(), bson.D{{"name", "jjk"}})
if err != nil {
panic(err)
}
println(res2.DeletedCount)
//update({"name":yi},{$set:{"age":21}})
res3, err := col.UpdateOne(context.Background(), bson.D{
{"name", "liu"},
}, bson.D{
{"$set", bson.D{{"age", 21}}},
})
fmt.Println(res3)