注意: 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代表降序,默认为升序。

MongoDB索引

如果不适用索引,那么查询效率很低,所以索引的使用是至关重要的。

对于索引我们常用的就是 ensureIndex() 方法

db.COLLECTION_NAME.ensureIndex({KEY:})

MongoDB聚合

MongoDB中聚合(aggregate)主要用于处理数据(诸如统计平均值,求和等),并返回计算后的数据结果。有点类似sql语句中的 count(*)。

nodejs连接MongoDB(重点)

初始操作:   之所以学习MongoDB,就是为了使用nodejs连接并使用MongoDB,所以这才是最重要的一部分。

 首先,初始化文件:

npm init

 然后,安装 mongodb 数据库:

cnpm install mongodb

 最后,我们就可以在js文件中先引入数据库,然后进行操作了。

数据库基本操作

  都比较简单,日后更新啦。

(补充:) 可以同时多处连接数据库吗? 可以多个客户端连接并使用其中的一个数据库吗?

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

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

MongoDB数据库进阶 --- 增删查改...的更多相关文章

  1. MongoDB数据库(二):增删查改

    MongoDB数据库的增删查改 1.插入数据 语法: db.集合名称.insert(document) db.table_name.insert({name:'gj',gender:1}) db.ta ...

  2. java实现简单的数据库的增删查改,并布局交互界面

        一.系统简介 1.1.简介  本系统提供了学生信息管理中常见的基本功能,主要包括管理员.管理员的主要功能有对学生信息进行增加.删除.修改.查找等操作,对信息进行管理,对信息进行修改.查找等操作 ...

  3. [课本]JDBC课程6--使用JDBC的DAO模块化--完成数据库的增删查改_工具类JDBCTools四个(Preparedstatement)功能模块的敲定版

    (课本P273-任务九) /**DAO: Data Access Object * 为什么用: 实现功能的模块化,更有利于代码的维护和升级 * 是什么: 访问数据信息的类,包含对数据的CRUD(cre ...

  4. SSM框架-MyBatis框架数据库的增删查改操作

    话不多说,在User.xml文件中主要写一下操作数据库的sql语句,增,删,查,改是最常见的数据库操作 User.xml文件下:

  5. C#实现对mongoDB的简单增删查改

    首先添加所需要驱动包(可通过nuget获得) using MongoDB.Bson;using MongoDB.Driver;using MongoDB.Driver.Builders; 一.设置配置 ...

  6. js实现对数据库的增删查改

    1.查询 复制代码 代码如下: <HTML> <HEAD> <TITLE>数据查询</TITLE> <Script > var conn = ...

  7. android SQLite使用SQLiteOpenHelper类对数据库进行增删查改

    一个简单的例子,当点击按钮时进行相应的操作,效果图如下: 项目代码如下: DatabaseHelper类 package com.example.sqlitedatebasetest; import ...

  8. SQL Server数据库---》增删查改

    ***数据的插入:(增) insert into 表名(字段列表) values(值列表) 如果不写字段列表就要为表添加全部的列数据 其实into也可以省略 每次只能插入一条数据 1.如果字段可以为n ...

  9. 用Jmeter实现mysql数据库的增删查改

    主要是参考虫师的“使用JMeter创建数据库(Mysql)测试”. 1.打开Jmeter,点击测试计划 链接:https://pan.baidu.com/s/1ZtaZ6IC_0DRjSlXkjslY ...

随机推荐

  1. 编写高质量代码改善C#程序的157个建议——建议4: TryParse比Parse好

    建议4: TryParse比Parse好 如果注意观察除string外的所有基元类型,会发现它们都有两个将字符串转型为本身的方法:Parse和TryParse.以类型double为例,这两个方法最简单 ...

  2. 明码——第九届蓝桥杯C语言B组(省赛)第二题

    原创 标题:明码 汉字的字形存在于字库中,即便在今天,16点阵的字库也仍然使用广泛.16点阵的字库把每个汉字看成是16x16个像素信息.并把这些信息记录在字节中. 一个字节可以存储8位信息,用32个字 ...

  3. 拉登是我罩的队_第三周_需求改进&原型设计

    需求改进&原型设计 1. 需求&原型改进 1.1硬件部分(1) 硬件部分分为主机和遥控器,分别由两个单片机进行控制.(2) 单片机1:负责显示游戏的界面.使用数码管显示当前得分,使用不 ...

  4. Sharepoint2013搜索学习笔记之自定义结果源(七)

    搜索中心新建好之后在搜索结果页上会默认有所有内容,人员,对话,视频这四个结果分类,每个分类会返回指定范围的搜索结果,这里我再添加了部门日志结果分类,搜索这个分类只会返回部门日志内容类型的搜索结果,要实 ...

  5. repeater+aspnetpager 组合分页

    页面代码 <%@ Page Language="C#" AutoEventWireup="true" CodeFile="TF_Product. ...

  6. 【SSO单点系列】(6):CAS4.0 单点流程序列图(中文版)以及相关术语解释(TGT、ST、PGT、PT、PGTIOU)

    CAS 相关的内容好久没写了,可能下周会继续更新一些内容吧. 在上一篇中的单点流程序列图由于是从官网直接下载来的,上面都是英文,可能有的朋友看不懂,因此修改成中文的. PS:只修改了一个,第二个图明天 ...

  7. Linux里的用户管理

    在linux中系统中,它并不认识帐号名称.它认识的是我们的帐号ID,帐号ID保存在/etc/passwd文件中.我们在登录linux主机时,在输入完帐号和密码时,linux会先查找/etc/passw ...

  8. Python实现——一元线性回归(梯度下降法)

    2019/3/25 一元线性回归--梯度下降/最小二乘法_又名:一两位小数点的悲剧_ 感觉这个才是真正的重头戏,毕竟前两者都是更倾向于直接使用公式,而不是让计算机一步步去接近真相,而这个梯度下降就不一 ...

  9. 使用原生实现jquery中的css方法

    由于jquery放在mobile页面上,有时候还是显得有点大,所以今天尝试使用原生来开发,但是习惯了jquery之后,转用原生开发之后,发现原生中,找不到可以替代jquery的css方法,于是对原生的 ...

  10. OpenStack-Mitaka

    一.Cloud 基础概念 IAAS:Infrastructre As A Service 基础架构及服务,OpenStack,CloudStack PAAS:Platform As A Service ...