设为首页 收藏本站
查看: 1667|回复: 0

[经验分享] MongoDB数据库进阶

[复制链接]

尚未签到

发表于 2017-12-15 22:37:08 | 显示全部楼层 |阅读模式
注意: monogdb数据在使用之后必须及时 mongodb.close()否则后台崩溃。
  在之前的文章中,我已经介绍了什么事MongoDB以及怎么在windows下安装MongoDB等等基本知识。 所以这篇进阶的博客就主要介绍以下如何进行数据库的基本操作 --- 增删查改。
  mongoDB 官方文档
  参考文档 
  参考文档
  推荐文章1 ---  这篇文章的作者使用mongoDB较为熟练,总结较为全面,可以作为参考。
  mongodb_修改器($inc/$set/$unset/$push/$pop/upsert......) ---  这篇文章对例如 $push 之类的修改器做了简单的介绍,可以参考。
  推荐文章3 --- 这篇文章也比较全,但是排版太乱,能看。

数据库相关
  显示所有数据库
  

show dbs  

DSC0000.png

  其中admin和local都是默认存在的数据库。
  查看当前数据库
  

db  

DSC0001.png

  即当前默认就是test数据库,但是为什么在 show dbs 的时候没有呢?  这是因为test数据库中没有任何数据,所以不会显示,后面会介绍插入数据,插入数据后就会显示了。
  创建数据库
  

use <数据库名>  

DSC0002.png

  值得注意的是: use 后的数据库如果不存在就创建,如果存在就切换!  
  删除数据库
  

db.dropDatabase()  

  此命令会删除当前数据库。

文档相关 && 集合相关
  删除集合
  

db.<集合名>.drop()  

  这样就会删除当前数据库下指定的某个集合。
  插入文档
  

db.<集合名>.insert(document)  

  其中如果不存在这个指定的集合就会创建,如果存在,就会在后面追加文档。
DSC0003.png

  值得注意的是: 先输入({然后回车 就可以多行了。
  插入文档还可以先把文档保存到变量上,然后插入变量即可。
  删除文档
  举例如下所示:
  

collection.deleteOne({  
name: name,
  

"time.day": day,
  
title:>  
}, function(err) {
  
mongodb.close();
  

if (err) {  

return callback(err.toString());  
}
  
callback(
null);  
});
  

  即使用deleteOne就可以删除其中的一个文档, 第一个参数是一个条件参数,确定要删除的文档,第二个是删除后的回调函数。
  查看集合
  

db.<集合名>.find()  

DSC0004.png

  更新文档
  

db.collection.update(  

<query>,  

<update>,  
{
  
upsert:
<boolean>,  
multi:
<boolean>,  
writeConcern:
<document>  
}
  
)
  



  • <query>类似于MySQL中的where后的条件,
  • <update>即为更新的对象。
  • upsert是一个布尔值,默认为false,是可选的,即如果根据条件找不到文档,也不插入更新,否则,插入更新; multi是布尔值,默认是false,即如果找到一个,就更新这一个,后面的不更新,若是true,则有多少满足的,就更新多少; writeConcern是指抛出异常的级别。
DSC0005.png    

  可以看出其中在更新的时候,我们只传入了两个参数,第二个参数尤为重要,一定要有 $set ,否则会出现错误。
  删除文档
  

db.<集合名>.remove(<query>)  

DSC0006.png

  查询文档
  之前我们使用的find就是查询文档,这里将进行更为详细的论述:
  

db.collection.find(query, projection)  

  我们之前使用的都没有接受参数,也就是说这两个参数是可选的,其中query表示查询条件, projection表示通过映射只返回键名。
  

db.collection.find().pretty();  

  这种方式查询到的文档是更容易读取的。
  除了find()之外还有一个findOne()方法,它只返回一个文档。
DSC0007.png

  另外还有 AND、 OR、 AND与OR联合使用这些方法查询。
  注: 下面这个查询文档的方法用的是比较多的,如下所示:
  以下实例为检索name名为“菜鸟教程”的例子:
  

var MongoClient = require('mongodb').MongoClient;  

var DB_CONN_STR = 'mongodb://localhost:27017/runoob';  

  

var selectData = function(db, callback) {  

//连接到表  
var collection = db.collection('site');
  
//查询数据
  
var whereStr = {"name":'菜鸟教程'};
  
collection.find(whereStr).toArray(function(err, result) {
  
if(err)
  
{
  
console.log('Error:'+ err);
  
return;
  
}     
  
callback(result);
  
});
  
}
  

  
MongoClient.connect(DB_CONN_STR, function(err, db) {
  
console.log("连接成功!");
  
selectData(db, function(result) {
  
console.log(result);
  
db.close();
  
});
  
});
  

  可见,首先要require到mongoDB并且创建一个实例对象,只是这里直接用的.的形式,然后创建一个查询函数,首先是或许数据中的一个集合(当然要先确定到一个集合才能更好的查询文档),然后在使用find方法,find接受的第一个参数是一个对象,对象中有名-值对,来进行详细的查找,然后找到之后转化为一个数组,数组接受一个函数,函数的第一个参数是错误对象,第二个参数是转化为的数组,我们可以对之进行操作。
  最后利用MongoClient.connect(DB_CONN_STR)来连接数据库。
  刚刚介绍的find()只接受了一个参数,但是实际上find()是可以接受两个参数的,下面介绍find()的语法结构:
  

db.collection.find(query, projection)  

DSC0008.png

  举例如下所示:
DSC0009.png

  MongoDB条件操作符
  常用的条件操作符有
  (>) 大于 --- $gt (其中我理解gt是right的缩写,也有人理解为 greater than)
  (<) 小于 --- $lt  (其中我理解lt是left的缩写,也有人理解为 less than)
  (>=) 大于等于 --- $gte (即gt或者equal)
  (<=) 小于等于 --- $lte (即lt或者equal)
DSC00010.png

  其中 db.fifth.find({"price": {$lte: 4}) 就相当于 MySQL 中的 select * from fifth where price <= 4
  其中 db.fifth.find({"price": {$gte: 3, $lte: 5}}) 就相当于 MySQL 中的select * from fifth where price >= 3 AND price <= 5
  $type操作符
DSC00011.png

  即在MongoDB中的值可以是各种类型的,主要是上面的这些,如 $type = 2 就表示是string类型的, $type = 8 就表示是boolean类型的。可以用于数据库查询,如下所示:
DSC00012.png

  limit()方法和skip()方法
  MySQL中也有类似的,即limit()用于限制显示的数目
DSC00013.png

  skip() 是用来跳过若干条数据的,如下:
DSC00014.png

  即如果接受参数2, 就跳过了前面的两条。
  sort()方法
  

db.<集合名>.find().sort({<排序关键字>:1})  

  1代表升序, -1代表降序,默认为升序。
DSC00015.png

  MongoDB索引
  如果不适用索引,那么查询效率很低,所以索引的使用是至关重要的。
  对于索引我们常用的就是 ensureIndex() 方法
  

db.COLLECTION_NAME.ensureIndex({KEY:1})  

  MongoDB聚合
  MongoDB中聚合(aggregate)主要用于处理数据(诸如统计平均值,求和等),并返回计算后的数据结果。有点类似sql语句中的 count(*)。
  nodejs连接MongoDB(重点)
  初始操作:   之所以学习MongoDB,就是为了使用nodejs连接并使用MongoDB,所以这才是最重要的一部分。
  首先,初始化文件:
  

npm init  

  然后,安装 mongodb 数据库:
  

cnpm install mongodb  

  最后,我们就可以在js文件中先引入数据库,然后进行操作了。
  数据库基本操作
  都比较简单,日后更新啦。
  (补充:) 可以同时多处连接数据库吗? 可以多个客户端连接并使用其中的一个数据库吗?
  答案是肯定的。 数据库服务器和web服务器是一样的, 都是一个服务器可以服务多个用户,所以多个用户来连接一个服务器就显然是可以的了。 毫无疑问, 可以连接一个服务器是可以的,那么多个用户操作其中一个数据库也必然是可以的,但是有一个好习惯是用完了一个数据库,你就把他关掉,不能站着茅坑不拉屎啊,对不对。
  如下所示,就是多个客户端同时连接一个数据库服务器并操作同一个数据库:
DSC00016.png

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-424527-1-1.html 上篇帖子: MongoDB环境准备 下篇帖子: MongoDB-文档插入、更新、删除、查询
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表