MongoDB入门

一、MongoDB创建数据库
#切换到zhang数据库下
use zhang 
#查看当前数据库为哪个数据库
db
#在当前数据库下,创建一个集合,我们在集合中插入一些数据
db.test.insert({"name":"小飞侠"})

注意: 在 MongoDB 中,集合只有在内容插入后才会创建! 就是说,创建集合(数据表)后要再插入一个文档(记录),集合才会真正创建。

二、MongoDB删除数据库
#查看当前数据库
db
#删除当前的数据库
db.dropDatabase()
三、MongoDB查看数据库
#查看所有的数据库
show dbs
四、MongoDB 集合操作
use test
#创建集合
db.runoo.insert({"name":"你好啊"})
#显示所有的集合
show tables
#删除一个集合
db.runoo.drop()
---------------------------------------------------添加集合中的内容
#创建一个col集合并且插入数据
db.col.insert({
        "_id" : ObjectId("56063f17ade2f21f36b03133"),
        "title" : "MongoDB 教程",
        "description" : "MongoDB 是一个 Nosql 数据库",
        "by" : "菜鸟教程",
        "url" : "http://www.runoob.com",
        "tags" : [
                "mongodb",
                "database",
                "NoSQL"
        ],
        "likes" : 100
})
---------------------------------------------------删除集合中的内容
#删除col集合中的内容

db.col.remove({})

##删除标题title为MongoDB 教程的数据
db.col.remove({'title':'MongoDB'})
---------------------------------------------------修改集合中的内容
#修改标题为MongoDB的标题 修改为MongoDB教程  默认修改一条
db.col.update({'title':'MongoDB'},{$set:{'title':'MongoDB教程'}})
#如果要修改全部的话使用这个
db.col.update({'title':'MongoDB教程'},{$set:{'title':'MongoDB'}},{multi:true})

在 MongoDB 中,你不需要创建集合。当你插入一些文档时,MongoDB 会自动创建集合。

4.1查询集合

语法:db.collection.find(query, projection)

  • query :可选,使用查询操作符指定查询条件
  • projection :可选,使用投影操作符指定返回的键。查询时返回文档中所有键值, 只需省略该参数即可(默认省略)。

若不指定 projection,则默认返回所有键,指定 projection 格式如下,有两种模式 1显示 0不显示 不能混合使用

db.collection.find(query, {title: 1, by: 1}) // inclusion模式 指定返回的键,不返回其他键
db.collection.find(query, {title: 0, by: 0}) // exclusion模式 指定不返回的键,返回其他键
#查看当前集合中所有的内容
db.col.find()
如果你需要以易读的方式来读取数据,可以使用 pretty() 方法,语法格式如下:
db.col.find().pretty()

除了 find() 方法之外,还有一个 findOne() 方法,它只返回一个文档。

#查询title包含 教 子的文档
db.col.find({title:/a/})

#查询title字段以教字开头的文档
db.col.find({title:/^a/})

#查询title字段以教字结尾的文档
db.col.find({title:/a$/})

#添加条件查询文档
db.col.find({'title':"MongoDB"}).pretty()

db.col.find({"title":"菜鸟教程555"}).pretty()

#使用 or查询

db.col.find({$or:[{"by":"菜鸟教程"},{"title": "MongoDB 教程"}]}).pretty()

#and和or联合使用
db.col.find({"likes": {$gt:50}, $or: [{"by": "菜鸟教程"},{"title": "MongoDB 教程"}]}).pretty()

#添加以下内容来进行测试查询
db.col.insert({
    title: 'PHP 教程', 
    description: 'PHP 是一种创建动态交互性站点的强有力的服务器端脚本语言。',
    by: '菜鸟教程',
    url: 'http://www.runoob.com',
    tags: ['php'],
    likes: 200
})


db.col.insert({title: 'Java 教程', 
    description: 'Java 是由Sun Microsystems公司于1995年5月推出的高级程序设计语言。',
    by: '菜鸟教程',
    url: 'http://www.runoob.com',
    tags: ['java'],
    likes: 150
})


db.col.insert({title: 'MongoDB 教程', 
    description: 'MongoDB 是一个 Nosql 数据库',
    by: '菜鸟教程',
    url: 'http://www.runoob.com',
    tags: ['mongodb'],
    likes: 100
})

#查询 likes 大于100的
db.col.find({likes : {$gt : 100}})

#查询likes大于等于100的
db.col.find({likes : {$gte : 100}})


#查询likes小于1000的
db.col.find({likes : {$lt : 1000}})

#查询likes小于等于100的
db.col.find({likes : {$lte : 100}})

#查询likes大于100  并且 大于300中间的
db.col.find({likes : {$lt :300, $gt : 100}})
五、MongoDB $type 操作符
#获取 col 集合中 title 为 String 的数据

db.col.find({title:{$type:"string"}})

六、MongoDB Limit与Skip方法
#limit使用语法如下
db.col.find().limit(1)
##skip方法
db.col.find().limit(1).skip(1)
七、MongoDB 排序
#排序方法(倒叙排序) 并使用 1 和 -1 来指定排序的方式,其中 1 为升序排列,而 -1 是用于降序排列。
db.col.find().sort({likes:-1})
八、MongoDB 索引
#创建索引
语法中 Key 值为你要创建的索引字段,1 为指定按升序创建索引,如果你想按降序来创建索引指定为 -1 即可。
db.col.createIndex({"title":1,"description":-1})

查看集合索引
db.col.getIndexes()
查看集合索引大小
db.col.totalIndexSize()
删除集合所有索引
db.col.dropIndexes()
删除集合指定索引
db.col.dropIndex("索引名称")
九、MongoDB 聚合
9.1aggregate() 方法

MongoDB中聚合的方法使用aggregate()。

#添加以下数据
db.mycol.insert({
   title: 'MongoDB Overview', 
   description: 'MongoDB is no sql database',
   by_user: 'runoob.com',
   url: 'http://www.runoob.com',
   tags: ['mongodb', 'database', 'NoSQL'],
   likes: 100
})


db.mycol.insert({
   title: 'NoSQL Overview', 
   description: 'No sql database is very fast',
   by_user: 'runoob.com',
   url: 'http://www.runoob.com',
   tags: ['mongodb', 'database', 'NoSQL'],
   likes: 10
})


db.mycol.insert({
   title: 'Neo4j Overview', 
   description: 'Neo4j is no sql database',
   by_user: 'Neo4j',
   url: 'http://www.neo4j.com',
   tags: ['neo4j', 'database', 'NoSQL'],
   likes: 750
})
#计算每个作者写的文章的个数

$sum	计算总和。
db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$sum : 1}}}])

$push	在结果文档中插入值到一个数组中。

db.mycol.aggregate([{$group : {_id : "$by_user", url : {$push: "$url"}}}])

$addToSet	在结果文档中插入值到一个数组中,但不创建副本。

db.mycol.aggregate([{$group : {_id : "$by_user", url : {$addToSet : "$url"}}}])

$first	根据资源文档的排序获取第一个文档数据。

db.mycol.aggregate([{$group : {_id : "$by_user", first_url : {$first : "$url"}}}])

$last	根据资源文档的排序获取最后一个文档数据
db.mycol.aggregate([{$group : {_id : "$by_user", last_url : {$last : "$url"}}}])
十、MongoDB 管道概念

MongoDB的聚合管道将MongoDB文档在一个管道处理完毕后将结果传递给下一个管道处理。管道操作是可以重复的。

表达式:处理输入文档并输出。表达式是无状态的,只能用于计算当前聚合管道的文档,不能处理其它的文档。

这里我们介绍一下聚合框架中常用的几个操作:

  • $project:修改输入文档的结构。可以用来重命名、增加或删除域,也可以用于创建计算结果以及嵌套文档。
  • m a t c h : 用 于 过 滤 数 据 , 只 输 出 符 合 条 件 的 文 档 。 match:用于过滤数据,只输出符合条件的文档。 matchmatch使用MongoDB的标准查询操作。
  • $limit:用来限制MongoDB聚合管道返回的文档数。
  • $skip:在聚合管道中跳过指定数量的文档,并返回余下的文档。
  • $unwind:将文档中的某一个数组类型字段拆分成多条,每条包含数组中的一个值。
  • $group:将集合中的文档分组,可用于统计结果。
  • $sort:将输入文档排序后输出。
  • $geoNear:输出接近某一地理位置的有序文档。
1、$project实例
db.mycol.aggregate(
    { $project : {
        title : 1 ,
        url : 1 ,
    }}
 );
 只显示title和url这两个列 默认是带着_id的 如不想要_id的话可以这样写
 db.mycol.aggregate(
    { $project : {
        _id : 0 ,
        title : 1 ,
        url : 1 ,
    }}
 );
2.$match实例
$match用于获取喜欢数大于40小于或等于1000记录,然后将符合条件的记录送到下一阶段$group管道操作符进行处理。
当 match 条件和 group 同时存在时,顺序会影响检索结果,必须先写 match 在前面。
#下面这段代码的意思也就是 现筛选处 大于40小于1000的记录 然后在根据 by_user来进行分组 进行统计
db.mycol.aggregate( [
                        { $match : { likes : { $gt : 40, $lte : 1000 } } },
                        { $group: { _id: "$by_user", count: { $sum: 1 } } }
                       ] );
3.$skip实例
#这句话的意思也就是前5个被过滤掉
 db.mycol.aggregate(
    { $skip : 5 });
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

往日时光--

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值