mongoDB语法

在这里插入图片描述

docker pull mongo # 拉去mongoDB镜像
-- 启动mongoDB容器后,进入它的命令行运行
mongo # 连接mongo服务(有密码:  mongodb://admin:123456@localhost/)
show dbs # 查看所有数据库
use admin # 选择数据库admin,没有则自动创建
db.createUser({ user: 'admin', pwd: '123456', roles: [ { role: "userAdminAnyDatabase", db: "admin" } ] }); # 创建一个admin管理员账号
#--- 出现如下,则说明创建成功
Successfully added user: {
        "user" : "admin",
        "roles" : [
                {
                        "role" : "userAdminAnyDatabase",
                        "db" : "admin"
                }
        ]
        
}
#---
db.auth("admin","123456"); # 验证身份对不对
show collections # 查看所有集合(相当于show tables)


# ------ 启动mongoDB管理界面
docker pull mongo-express # 领取镜像
# 启动容器  (--link mongo容器id:mongo容器名  链接mongoDB容器,使其可接收数据) (-e ME_CONFIG_MONGODB_SERVER="链接的MongoDB容器名称" )
docker run -itd -p 8081:8081 --link e8797fbe90f9:mongo1 -e ME_CONFIG_BASICAUTH_USERNAME="admin" -e ME_CONFIG_BASICAUTH_PASSWORD="123456" -e ME_CONFIG_MONGODB_SERVER="mongo1" mongo-express 
# 浏览器打开localhost:8081即可访问


mongodb语法
use test; # 如果不存在数据库test,则会隐式创建
db.createCollection('tb1'); # 创建集合tb1(表)
show collections;  # 查看此数据库下使用集合
db.tb1.drop(); # 删除集合tb1 -- true|false
db.tb2.insert({name:"test",age:32}); # 往集合tb2中插入一条数据,如果集合不存在则会隐式创建
db.tb2.insert([{name:"test2",age:12},{name:"name2",age:22}]); # 以数组形式向集合tb2插入多条数据
db.tb2.find(); # 查询集合tb2所有数据
for (var i=0;i<6;i++){  # 循环插入数据
    db.tb2.insert({name:"n"+i,age:i})
}

# db.集合名.find({查询条件}[,{查询的列}]) 查询语法,[]表示可选(不管选择了什么列,系统自定义的_id都会在)
db.tb2.find({});  # 查询集合tb2中的所有数据
db.tb2.find({age:5,name:'n3'}) # 查询age=5 and name='n3'的数据
db.tb2.find({age:5},{age:1}) # 只查询age=5的age列
db.tb2.find({},{age:0}) # 查询除列age外的所有数据

# 查询时间范围内数据 ISODate("2021-05-20T00:00:00.000+08:00")<=orderinfo.dwinserttime<ISODate("2021-05-21T00:00:00.000+08:00")
db.table_name.find({"$and":[{"orderinfo.dwinserttime":{"$gte":ISODate("2021-05-20T00:00:00.000+08:00")}},{"orderinfo.dwinserttime":{"$lt":ISODate("2021-05-21T00:00:00.000+08:00")}}]})
   .projection({})
   .sort({_id:-1})
   .count();
运算符作用
$gt大于
$gte大于等于
$lt小于
$lte小于等于
$ne不等于
$inin
$ninnot in
# db.tb2.find({键:{运算符:值}})
db.tb2.find({age:{$gte:30}}) # age >=30
db.tb2.find({age:{$in:[2,6]}}) # age in (2,6)
mongoDB文档修改语法

语法: db.集合名.update(条件,新数据[,是否新增,是否修改多条])
新数据语法:{修改器:{键:值}}
是否新增:条件匹配不到数据则插入(true是插入,默认是false不插入)
是否修改多条:将匹配成功的数据都修改(默认false)

修改器作用
$inc递增
$rename重命名列
$set修改列值
$unset删除列
db.tb3.update({title:"t0"},{title:"tt0"}) # 用{title:"tt0"}替换title=t0的数据
db.tb3.update({title:"t1"},{$set:{title:"tt1"}}) # 把title=t1的修改为tt1
db.tb3.update({title:"t2"},{$inc:{price:10}}) # 将title=2的price加10
db.tb3.update({title:"t2"},{$inc:{price:-9}}) # 将title=2的price减9

# 一次性写多个修改器
db.tb3.update({title:"t0"},{
    $set:{title:"tt0"},
    $inc:{price:-3},
    $unset:{dis:true}
})

db.tb3.update({title:"ex"},{$set:{price:20}},true) # 第3个参数为true,找不到匹配数据则插入

mongoDB文档删除语法

语法:db.集合名.remove(条件[,是否删除一条数据]) (true:只删除一条;false:删除全部匹配数据;默认false)

db.tb3.remove({},true) # 只删除一条数据
db.tb3.remove({}) # 删除全部

# 查询结果格式化
db.tb3.find().pretty()
查询结果如下:
{
    "_id" : ObjectId("5ff1d55c4051fd289774d19e"),
    "title" : "t0",
    "price" : 0,
    "dis" : "fgjj"
}
{
    "_id" : ObjectId("5ff1d55c4051fd289774d19f"),
    "title" : "t1",
    "price" : 1,
    "dis" : "fgjj"
}
{
    "_id" : ObjectId("5ff1d55c4051fd289774d1a0"),
    "title" : "t2",
    "price" : 2,
    "dis" : "fgjj"
}

# 排序
db.tb3.find().sort({price:-1})  # -1降序排序;1升序排序
db.tb2.find().sort({age:1}).skip(3).limit(5) # 跳过前3条,查询5条数据;分页
db.tb2.find().count() # 查询数据总条数

聚合查询
db.集合名.aggregate([
	{管道:{表达式}}
	...
])
管道描述
$group将集合中的文档分组,用于统计结果
$match过滤数据,只输出符合条件的文档
$sort集合数据进一步排序
$skip跳过指定文档数
$limit限制集合数据返回文档数
$sum总和 $sum:1 同count
$avg平均
$min最小值
$max最大值
$each和$addToSet操作符一起使用添加多个值到数组字段中如果值不存在于数组字段中。
$pullAll{$pullAll:{field:value_array}} 一次删除数组内的多个值
# 把集合tb2按name分组,取sum(age)
db.tb2.aggregate([
    {
        $group:{
            _id:"$name",  
            rs:{$sum:"$age"}
        }
    }
])

# 集合tb2的数据总数total_num和平均年龄tatal_avg
db.tb2.aggregate([
    {
        $group:{
            _id:null,
            total_num:{$sum:1},
            total_avg:{$avg:"$age"}
        }
    }
])

# 按name分组,按name相同数量升序排序
db.tb2.aggregate([
    {
        $group:{
            _id:"$name",
            rs:{$sum:1}
        }
    },
    {
        $sort:{rs:1}
    }
])

操作符一起使用添加多个值到数组字段中如果值不存在于数组字段中。
{ $addToSet: { <field>: { $each: [ <value1>, <value2> ... ] } } }
mongoDB索引
db.tb2.getIndexes() # 查看集合tb2的索引
db.tb2.createIndex({age:1})  # 给集合tb2的字段age添加索引,1代表升序
db.tb2.createIndex({name:-1},{name:"index_name"}) # 给集合tb2的name字段添加降序索引,索引名为index_name

#查看索引如下
[
    {
        "v" : 2,
        "key" : {
            "_id" : 1  # 索引字段:排序方式
        },
        "name" : "_id_" #索引名
    },
    {
        "v" : 2,
        "key" : {
            "age" : 1
        },
        "name" : "age_1"
    },
    {
        "v" : 2,
        "key" : {
            "name" : -1
        },
        "name" : "index_name"
    }
]


#删除索引  db.集合名.dropIndex("索引名")
db.tb2.dropIndex("age_1") # 删除集合tb2中索引名为age_1的索引
#删除集合的全部索引   db.集合名.dropIndexes()
db.tb2.dropIndexes()  # 删除集合tb2的全部索引(系统索引_id还在)
db.tb2.createIndex({name:1,age:-1},{name:"index_name_group"})  # 创建组合索引
db.tb3.createIndex({title:1},{unique:"title"})  # 给title字段创建唯一索引

ObjectId("60a53600e876c71383fd69f0").getTimestamp(); // ISODate("2021-05-20T00:00:00.000+08:00") -- 查询objectId的时间

// 把时间用js转成objectId字符串,然后就可以根据_id查询数据范围内的数据了
db.market_info.find({
    _id:{
        '$gte': ObjectId("60b508000000000000000000"), // 查询_id>= 
        '$lt': ObjectId("60b659800000000000000000") // _id <
    }
  })
   .projection({})
   .sort({_id:-1})
   .count();
function timeToObjId( time ) {
    var t = new Date(time);
    t = t.getTime()/1000; // 转换成秒数
    return t.toString(16)+'0000000000000000'; // 转换成16进制的字符串,再加补齐16个0
}
 
var objIdTimeFrom = timeToObjId( '2021-06-01 00:00:00' );
var objIdTimeFrom2 = timeToObjId( '2021-06-04 00:00:00' );
console.log(objIdTimeFrom); // 60b508000000000000000000
console.log(objIdTimeFrom2); // 60b8fc800000000000000000

$elemMatch

db.test.insert({
    "class":"1",
    "student":[
        {"name":"mac","age":18,"sex":true},
        {"name":"jack","age":19,"sex":true},
        {"name":"rose","age":20,"sex":false}
    ]
})

db.test.find({ // 查询student.name = mac or student.age=20的数据
	"student.name":"mac",
	"student.age":20
})

db.test.find({ // 查询student.name = mac and student.age=20的数据
	"student":{$elemMatch:{"name":"mac","age":20}}
})
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MongoDB语法是用于在MongoDB数据库中执行操作的语法规则。其中一些常见的语法包括: 1. 数据库链接:用于建立与MongoDB数据库的连接。可以使用MongoDB连接字符串或MongoDB连接对象来进行连接。 2. 条件操作符:用于比较和筛选集合中的数据。常见的条件操作符包括大于($gt)、小于($lt)、大于等于($gte)、小于等于($lte)、等于($eq)和非等于($ne)等。 3. 插入数据:使用insert()方法向集合中插入数据。可以使用语法格式如下:db.集合名.insert({字段名: 值})。 总结起来,MongoDB语法包括数据库链接、条件操作符和插入数据等基本操作。使用这些语法可以对MongoDB数据库进行增删改查等操作。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [MongoDB 语法大全](https://blog.csdn.net/weixin_38316697/article/details/126085968)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [【数据库】——MongoDB常用语法](https://blog.csdn.net/weixin_44697562/article/details/110122105)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值