zoukankan      html  css  js  c++  java
  • MongoDB数据库进阶 --- 增删查改...

      注意: monogdb数据在使用之后必须及时 mongodb.close()否则后台崩溃。

      在之前的文章中,我已经介绍了什么事MongoDB以及怎么在windows下安装MongoDB等等基本知识。 所以这篇进阶的博客就主要介绍以下如何进行数据库的基本操作 --- 增删查

    mongoDB 官方文档

      如下操作分为对 数据库、集合、文档的操作,操作的步骤为 创建、查看、删除,这样更容易理解和记忆。  

    数据库相关

    创建数据库

    use <数据库名>

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

    显示所有数据库

    show dbs

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

    查看当前数据库

    db

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

    删除数据库

    db.dropDatabase()

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

    集合相关 

    创建集合

    注意:创建集合的方式就是给某个集合里插入文档

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

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

    值得注意的是: 先输入({然后回车 就可以多行了。

    插入文档还可以先把文档保存到变量上,然后插入变量即可。 

    查看当前数据库下的所有集合

    show collections

    即可查看到当前数据库下的所有集合。

    重命名集合:

    db.<集合名>.renameCollection(新的集合名)

    删除集合

    db.<集合名>.drop()

    这样就会删除当前数据库下指定的某个集合,数据库的删除是db.dropDatabase(),而中间没有数据库名称,是因为db表示当前数据库,直接删除当前数据库当然不需要指定,而这里的集合在一个数据库下可能有很多,所以要指定集合。

    文档相关

    创建文档

    创建文档和创建集合的步骤是一致的,这里不再列举。

    查看当前数据库下某个集合的文档

    db.<集合名>.find()

    删除当前数据库下的某个集合的一个或多个符合条件文档

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

    删除当前数据库下的某个集合的最多一个符合条件的文档:(注意deleteOne 和 remove的区别)

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

    即使用deleteOne就可以删除其中的一个文档, 第一个参数是一个条件参数,确定要删除的文档。

    注意一般,对于数据库的操作都是异步的,所以有回调函数

    更新文档

    db.collection.update(<query>, <update>,<options>)
    1. <query>类似于MySQL中的where后的条件, 
    2. <update>即为更新的对象。
    3. <options>是一个选项,即我们可以通过它定义相关规则,如{upsert: <boolean>,multi: <boolean>,writeConcern: <document>}
      其中upsert是一个布尔值,默认为false,是可选的,即如果根据条件找不到文档,也不插入更新,否则,插入更新; multi是布尔值,默认是false,即如果找到一个,就更新这一个,后面的不更新,若是true,则有多少满足的,就更新多少; writeConcern是指抛出异常的级别。

    查询所有满足条件的文档

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

    db.collection.find(query, projection) 

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

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

    查询满足条件的最多一个文档

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

    另外还有 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接受的第一个参数是一个对象,对象中有名-值对,来进行详细的查找,然后找到之后转化为一个数组,数组接受一个函数,函数的第一个参数是错误对象,第二个参数是转化为的数组,我们可以对之进行操作。

    MongoDB条件操作符

    常用的条件操作符有

    (>) 大于 --- $gt (其中我理解gt是right的缩写,也有人理解为 greater than)

    (<) 小于 --- $lt  (其中我理解lt是left的缩写,也有人理解为 less than)

    (>=) 大于等于 --- $gte (即gt或者equal)

    (<=) 小于等于 --- $lte (即lt或者equal)

     

     其中 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操作符

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

    limit()方法和skip()方法

    MySQL中也有类似的,即limit()用于限制显示的数目

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

    即如果接受参数2, 就跳过了前面的两条。

    sort()方法

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

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

    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服务器是一样的, 都是一个服务器可以服务多个用户,所以多个用户来连接一个服务器就显然是可以的了。 毫无疑问, 可以连接一个服务器是可以的,那么多个用户操作其中一个数据库也必然是可以的,但是有一个好习惯是用完了一个数据库,你就把他关掉,不能站着茅坑不拉屎啊,对不对。 

     如下所示,就是多个客户端同时连接一个数据库服务器并操作同一个数据库:

  • 相关阅读:
    HotSpot 虚拟机垃圾回收算法实现
    多线程死锁的产生原因以及如何避免
    Java异常实战——OutOfMemoryError
    MySQL数据库中的四种隔离级别
    Java运行时数据区概述
    MySQL 字符集和校对
    debezium关于cdc的使用(下)
    debezium关于cdc的使用(上)
    对xxl-job进行simpleTrigger并动态创建任务扩展
    折腾Java设计模式之单例模式
  • 原文地址:https://www.cnblogs.com/zhuzhenwei918/p/6752936.html
Copyright © 2011-2022 走看看