mongodb基础

启动mongodb

管理员方式打开控制台窗口

执行命令: net start mongodb

net start mongodb    #启动服务
net stop mongodb    #退出服务

连接mongodb

本地连接

>mongo admin -u admin -p 123456 // 通过用户名为:admin 密码为:123456

远程连接

>mongo --authenticationDatabase admin -u 用户名 -p 密码 服务器外网地址:27017

创建数据库

语法

MongoDB 创建数据库的语法格式:

use database_name

如果数据库不存在,则创建数据库,否则切换到指定数据库。

实例

使用 show dbs 命令查看所有的数据库:

刚创建的数据库并不会在列表中, 要显示出创建的数据库, 需要往新建的数据库创建数据。

#切换到数据库test1, 插入数据

>use mongo_test // 切换数据库, 不存在则创建

>db.collection_first.insert({"name":"hello world!"}) //将数据插入到collection_first集合

#集合插入文档命令: db.collection_name.insert({})

>db.collection_first.find() // 查找collection_first集合中 有多少条数据

#不指定数据库时, 插入数据会将数据插入到对应身份的数据库

再次查看数据库

删除库 与 删除集合

删除库

语法

db.dropDatabase() 

添加测试数据库, 查看现有数据库show dbs

实例

删除库

#切换到数据库test1, 执行删除

>use test1 // 切换到test1

>db.dropDatabase() // 执行删除

# 或直接使用 db.test1.dropDatabase()

删除集合

语法

db.collection.drop() // 删除集合

实例

#切换到数据库mongo_test, 删除集合 collection_demo

>use mongo_test // 切换到mongo_test

>show collections // 查看所有集合

>db.collection_demo.drop() // 删除集合

查询文档

语法

db.collection.find(query, projection)

参数说明:

query: 查询条件(注意查询字段类型)

projection: 

> db.collection_first.find()

{ "_id" : ObjectId("65eacf7dda933b1557d3124d"), "name" : "hello world!" }

使用pretty() 将返回数据格式化, 提高可读性

条件操作符

>db.collection_first.find({"age": {"$gt":20}}); // age > 20

>db.collection_first.find({"age": {"$lt":20}}); // age < 20

>db.collection_first.find({"age": {"$gte":20}}); // age >= 20

>db.collection_first.find({"age": {"$lte":20}}); // age <= 20

>db.collection_first.find({"age": 18}); // age == 18

>db.collection_first.find({"age": {"$ne":18}}); // age != 18

逻辑条件(and、or)

where and

// where age == 18 && name==张三

>db.collection_first.find({"age": 18, "name":"张三"});

where or

 // where age == 18 || sex=="女"

>db.collection_first.find({"$or":[{"age": 18}, {"sex":"女"}]});

where  and与or联合使用

 // where from="China" and (age == 18 || sex=="女")

>db.collection_first.find({"from":"China","$or":[{"age": 18}, {"sex":"女"}]});

排序

db.collection_name.find().sort({key_name: -1}); // 1=升序, -1=倒序

示例:

>db.collection_first.find().sort({"age": 1}); // 按age升序

>db.collection_first.find().sort({"age": -1}); // 按age倒序

Limit与Skip

// 读取数据数量

>db.collection_name.find().limit(number);

// skip跳过指定条数数据

>db.collection_name.find().limit(number).skip(number);

示例:

// 跳过2条, 返回3条数据(3-5)

>db.collection_first.find().limit(3).skip(2);

插入文档

语法

db.collection_name.insert(document);

db.collection_name.save(document);

实例

>db.collection_demo.insert({"name":"张三", "age":18, "sex":"男", "desc":"法外狂徒"});

>db.collection_demo.save({"name":"王二", "age":20, "sex":"女", "desc":"中间"});

更新文档

语法

db.collection_name.update(<query>, <update>, {

upsert: <bool>, multi: <bool>, writeConcern:<document>});

参数说明:

query : 条件

update : 更新字段

upsert : 可选, 不存在update的记录, 为true时进行插入; 默认false

multi : 可选, 默认false, 只更新查询的第一条数据; true, 更新所有匹配的数据

writeConCern : 可选, 抛出异常的等级

删除文档

语法

db.collection_name.remove(<query>, <justOne>);

2.6版本后:

db.collection_name.remove(<query>, {

justOne: <bool>, writeConcern: <document>});

参数说明:

query : 可选, 条件

justOne : 可选, 默认false, 删除所有匹配文档; true/1, 删除一个文档

writeConCern : 可选, 抛出异常的等级

$type操作符

$type操作符是基于BSON类型来检索集合中匹配的数据类型,并返回结果

实例

准备数据:

>db.col.insert({"name": "张三","age": 18});

>db.col.insert({"name": "王二","age": 28});

>db.col.insert({"name": "候大","age": "30"});

获取age字段是string类型的数据:

>db.col.find({"age": {$type: 2}});

MONGO字段类型

索引

MongoDB使用 createIndex() 方法来创建索引。

语法

>db.collection.createIndex(keys, options)

参数说明:

keys: 要创建的索引字段

options: 可选参数

参数名

类型

描述

background

Boolean

默认false, true=以后台方式创建索引

unique

Boolean

默认false,  为true时创建唯一索引

name

string

索引名称。未指定,通过字段名和排序顺序生成一个索引名称

dropDups

Boolean

3.0+版本废弃。在建立唯一索引时是否删除重复记录,指定 true 创建唯一索引。默认值为 false.

sparse

Boolean

对文档中不存在的字段数据不启用索引;这个参数需要特别注意,为true的话,在索引字段中不会查询出不包含对应字段的文档.。默认值为 false.

expireAfterSeconds

integer

指定一个以秒为单位的数值,完成 TTL设定,设定集合的生存时间。

v

index

version

索引的版本号。默认的索引版本取决于mongod创建索引时运行的版本。

weights

document

索引权重值,数值在 1 到 99,999 之间,表示该索引相对于其他索引字段的得分权重。

default_language

string

对于文本索引,该参数决定了停用词及词干和词器的规则的列表。 默认为英语

language_override

string

对于文本索引,该参数指定了包含在文档中的字段名,语言覆盖默认的language,默认值为 language.

实例

>db.collection_demo.createIndex({"age": 1}, {"name": "idx_age"})

Key: 要创建的索引字段

1: 按升序创建索引; -1: 按降序来创建索引

也可多个字段创建索引(对应关系数据库复合索引)

>db.collection_demo.createIndex({"sex": 1, "age": -1}, {"name": "idx_sex_age"})

注意: 创建索引过程会阻塞数据库操作, background可指定以后台方式创建索引background默认为false

>db.collection_demo.createIndex({"age": 1}, {"name":"idx_age","background": true})

聚合

mongodb聚合主要用于处理数据, 类型sql的统计函数

语法

aggregate() 方法的基本语法格式如下所示:

>db.COLLECTION_NAME.aggregate(AGGREGATE_OPERATION)

实例

准备数据:

{"title":"数学", "level":"初级", "version":2003, "count":500}

{"title":"数学", "level":"中级", "version":2003, "count":100}

{"title":"数学", "level":"高级", "version":2003, "count":56}

{"title":"英语", "level":"初级", "version":2003, "count":100}

{"title":"英语", "level":"初级", "version":2015, "count":120}

{"title":"英语", "level":"中级", "version":2015, "count":120}

{"title":"英语", "level":"高级", "version":2015, "count":120}

>db.col_agg.aggregate([
    {"$match":{"version":2003}},
    {"$group":{
        "_id":{"title":"$title","level":"$level"},
        "title":{"$first":"$title"},
        "level":{"$first":"$level"},
        "book_count":{"$sum":"$count"}
    }}
])

相当于mysql:

select title, level, sum(`count`) as book_count from col_agg where version=2003 group by title, level;

聚合表达式:

表达式

描述

实例

$sum

计算总和

db.col_agg.aggregate([{"$group":{"_id":"$version", "total":{"$sum":"$count"}}}])

$avg

计算平均值

db.col_agg.aggregate([{"$group":{"_id":"$version", "avg":{"$avg":"$count"}}}])

$min

最小值

db.col_agg.aggregate([{"$group":{"_id":"$version", "min":{"$min":"$count"}}}])

$max

最大值

db.col_agg.aggregate([{"$group":{"_id":"$version", "max":{"$max":"$count"}}}])

$push

将值加入数组(不去重)

db.col_agg.aggregate([{"$group":{"_id":"$version", "arr":{"$push":"$title"}}}])

$addToSet

将值加入数组(去重)

db.col_agg.aggregate([{"$group":{"_id":"$version", "arr":{"$addToSet":"$title"}}}])

$first

根据文档排序, 获取第一个文档数据

db.col_agg.aggregate([{"$group":{"_id":"$version", "title":{"$first":"$title"}}}])

$last

根据文档排序, 获取最后一个文档数据

db.col_agg.aggregate([{"$group":{"_id":"$version", "title":{"$last":"$title"}}}])

管道操作符

  • $project:修改输入文档的结构。可以用来重命名、增加或删除域,也可以用于创建计算结果以及嵌套文档。
  • $match:用于过滤数据。$match使用MongoDB的标准查询操作。
  • $limit:用来限制MongoDB聚合管道返回的文档数。
  • $skip:在聚合管道中跳过指定数量的文档,并返回余下的文档。
  • $unwind:将文档中的某一个数组类型字段拆分成多条,每条包含数组中的一个值。
  • $group:将集合中的文档分组,可用于统计结果。
  • $sort:将输入文档排序后输出。
  • $geoNear:输出接近某一地理位置的有序文档。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值