简介

  MongoDB

  开源,高性能的NoSQL数据库;支持索引、集群、复制和故障转移、各种语言的驱动程序;高伸缩性;

  NoSQL毕竟还处于发展阶段,也有说它的各种问题的:http://coolshell.cn/articles/5826.html

   官网地址:http://www.mongodb.org/

  API Docs:http://docs.mongodb.org/manual/

  node-mongodb-native

  mongodb的nodejs驱动;

  GitHub地址:https://github.com/mongodb/node-mongodb-native

MongoDB安装(windows)

  官方安装说明: http://docs.mongodb.org/manual/tutorial/install-mongodb-on-windows/

  按照官方说明在win7 64位环境下配置还是遇到了问题,我还是把我安装配置的过程写一下

  下载MongoDB并安装

  下载地址:http://www.mongodb.org/downloads

  创建数据库和日志存放目录

  在C盘根目录下新建“M_DB”和“M_LOG”两个文件夹,分别存放数据库文件和日志文件

  创建一个config文件

  打开目录“C:\Program Files\MongoDB 2.6 Standard\bin”,并在此目录下新建一个mongo.config文件,文件内容如下

##数据库目录
dbpath=C:\M_DB ##日志输出文件
logpath=C:\M_LOG\mongodb.log

  添加环境变量

  在环境变量PATH中加入“C:\Program Files\MongoDB 2.6 Standard\bin“

  以Windows服务器运行MongoDB

  以管理员方式打开CMD窗口,运行如下命令安装MongoDB服务,可以在 “控制面板\所有控制面板项\管理工具\服务”找到名为“MongoDB”的服务右键启动

mongod --config "C:\Program Files\MongoDB 2.6 Standard\bin\mongo.config" --install

  启动服务

  在CMD窗口中运行如下命令,也可以在可以在 “控制面板\所有控制面板项\管理工具\服务”

net start mongodb

  测试连接

  在CMD中运行如下命令,查看结果

mongo

  

  安装成功!

  最后两步非必需;MongoDB默认端口是27017,可以修改!

  对于“C:\Program Files\MongoDB 2.6 Standard\bin”目录下的exe程序,做个简单的说明,可能更利于了解可以做些什么操作,基础学习关注mongod.exe和mongo.exe即可

  mongo.exe:客户端,支持js语法

  mongod.exe:服务端

  mongodump.exe:备份工具

  mongorestore.exe:恢复工具

  mongoexport.exe:导出工具

  mongoimport.exe:导入工具

  mongostat.exe:实时性能监控工具

  mongotop.exe:跟踪MongDB实例读写时间工具

  更多详细解释或操作可以查看:http://docs.mongodb.org/manual/reference/program/

  当然,如果只是在Windows平台安装MongoDB进行学习练习,可参考:https://www.cnblogs.com/flyingeagle/articles/9193668.html

MongoDB基本语法和操作入门(mongo.exe客户端操作)

  MongoDB已经安装好,下面先对MongoDB进行一个简单的入门,再用node-mongodb-native去操作MongoDB

库操作

  新建数据库:第一步:use 新建数据库名;第二步:进行此库相关的操作;如果不进行第二步,该数据库不会被创建

  查看数据库:show dbs;

  新建表:db.createCollection('要新建的表名');

  查看当前数据库下表: show collections;

  删除当前数据库指定表:db.表名.drop();

  删除当前数据库:db.dropDatabase();

  示例操作如下图:

  

  1.默认为存在“admin”和“local”两个数据库;admin数据库是存放管理员信息的数据库,认证会用到;local是存放replication相关的数据;这两处本篇都没有涉及到;

  2.find();是个查询操作,后面会讲到,上面用到主要是为了演示use不存在的库后,进行相关操作会创建出这个库;

  3.MongoDB没有像MySQL或MSSQL等数据库这么严格的规定,不是非得要先建库、建表、建各种字段,以后的操作中慢慢的会体会到^_^!

插入

  方法一:db.表名.insert(数据);

  

  1.从上图操作可以看出,没有去创建“tb1”表,其实通过插入操作也会自动创建

  2._id,是mongodb自已生成的,每行数据都会存在,默认是ObjectId,可以在插入数据时插入这个键的值(支持mongodb支持的所有数据类型)  

  方法二:db.表名.save(数据);

     

  1.从上图操作可以看出,save也可达到insert一样的插入效果

  2._id可以自已插入

  3.一个表中不一定要字段都相同

  那它们有什么区别?

  

  从图中操作就可以看出,虽然insert和save方法都可以插入数据,当默认的“_id”值已存在时,调用insert方法插入会报错;而save方法不会,会更新相同的_id所在行数据的信息

查询  

  查询表中所有数据:db.表名.find();

  按条件查询(支持多条件):db.表名.find(条件);

  查询第一条(支持条件):db.表名.findOne(条件);

  限制数量:db.表名.find().limit(数量);

  跳过指定数量:db.表名.find().skip(数量);

  

  从上图中可以看出具体用法,批量插入默认数据我用了一个javascript语法循环;

  比较查询

  大于:$gt

  小于:$lt

  大于等于:$gte

  小于等于:$lte

  非等于:$ne

  

  上面看到了AND的关系,或者的关系应该怎么用?

  或者:$or

  

  in和not in查询(包含、不包含)
  $in
  $nin
   

  查询数量:db.表名.find().count();

  排序:db.表名.find().sort({"字段名":1});

     1:表示升序  -1:表示降序

  指定字段返回: db.表名.find({},{"字段名":0});  

     1:返回  0:不返回

  

  查询就讲到这里了,感觉查询示例一下讲不完,还有些高级查询,大家自行去了解一下吧^_^!

修改

  前面save在_id字段已存在是就是修改操作,按指定条件修改语法如下

  db.表名.update({"条件字段名":"字段值"},{$set:{"要修改的字段名":"修改后的字段值"}});

  

删除

  db.表名.remove(条件);

  

存储过程

  创建存储过程:

db.system.js.save({_id:"存储过程ID",
value:function(参数){
-- 逻辑主体;
return 返回;
}});

  调用存储过程

db.eval("存储过程ID()");

  

  所有存储过程都存放在db.system.js中

  MongoDB基本操作就讲这么多了,基本够用,深入学习大家自已去看看API^_^!

nodejs操作MongoDB

  先用npm安装mongodb

npm install mongodb

  安装成功后,继续在上面操作创建的库和表中操作

插入

var MongoClient = require('mongodb').MongoClient;
var DB_CONN_STR = 'mongodb://localhost:27017/wilsondb1'; var insertData = function(db, callback) {
//连接到表
var collection = db.collection('tb2');
//插入数据
var data = [{"name":'wilson001',"age":21},{"name":'wilson002',"age":22}];
collection.insert(data, function(err, result) {
if(err)
{
console.log('Error:'+ err);
return;
}
callback(result);
});
} MongoClient.connect(DB_CONN_STR, function(err, db) {
console.log("连接成功!");
insertData(db, function(result) {
console.log(result);
db.close();
});
});

查询

var MongoClient = require('mongodb').MongoClient;
var DB_CONN_STR = 'mongodb://localhost:27017/wilsondb1'; var selectData = function(db, callback) {
//连接到表
var collection = db.collection('tb2');
//查询数据
var whereStr = {"name":'wilson001'};
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();
});
});

修改

var MongoClient = require('mongodb').MongoClient;
var DB_CONN_STR = 'mongodb://localhost:27017/wilsondb1'; var updateData = function(db, callback) {
//连接到表
var collection = db.collection('tb2');
//更新数据
var whereStr = {"name":'wilson001'};
var updateStr = {$set: { "age" : 100 }};
collection.update(whereStr,updateStr, function(err, result) {
if(err)
{
console.log('Error:'+ err);
return;
}
callback(result);
});
} MongoClient.connect(DB_CONN_STR, function(err, db) {
console.log("连接成功!");
updateData(db, function(result) {
console.log(result);
db.close();
});
});

删除

var MongoClient = require('mongodb').MongoClient;
var DB_CONN_STR = 'mongodb://localhost:27017/wilsondb1'; var delData = function(db, callback) {
//连接到表
var collection = db.collection('tb2');
//删除数据
var whereStr = {"name":'wilson001'};
collection.remove(whereStr, function(err, result) {
if(err)
{
console.log('Error:'+ err);
return;
}
callback(result);
});
} MongoClient.connect(DB_CONN_STR, function(err, db) {
console.log("连接成功!");
delData(db, function(result) {
console.log(result);
db.close();
});
});

调用存储过程

var MongoClient = require('mongodb').MongoClient;
var DB_CONN_STR = 'mongodb://localhost:27017/wilsondb1'; var invokeProcData = function(db, callback) {
//存储过程调用
db.eval('get_tb2_count()', function(err, result) {
if(err)
{
console.log('Error:'+ err);
return;
}
callback(result);
});
} MongoClient.connect(DB_CONN_STR, function(err, db) {
console.log("连接成功!");
invokeProcData(db, function(result) {
console.log(result);
db.close();
});
});

  到此CRUD操作就完成,通过回调函数的result参数进行判断都可以进行业务逻辑的进一步组合!  

写在之后...

  本篇针对node-mongodb-native操作MongoDB没有做更深的讲解,原因是针对它的进行再次封装的东西很多,且更利于编程实现,比如:mongoosemongoskinmongolian等等,应用性不错;

  mongoose的可能用的比较多...

  本文中很多地方我都还是习惯的用表、行等术语去描述,其实对NoSQL来说并不对,只是有助于习惯了关系型数据库的开发人员来解;

  文章中“表”本应该描述为“collection(集合)”;“行”应该描述为“文档(document)”,一个database中可以有多个collection,一个collection中又可以有多个document

  文章中并没有涉及认证的部分,大家自行去补一下,非常简单,我文中也挺到了两个默认数据库中的“admin”数据库

  用CMD中使用mongo.exe操作时,插入中文遇一了问题,原因是MongoDB默认编辑是utf-8,而CMD是GBK,所以在CMD窗口中执行这个命令修改编辑即可:chcp 65001

  注意mongodb严格区分大小写,比如查询 db.tb2.find({"name":"wilson0"})和 db.tb2.find({"Name":"wilson0"}) 并不是用的同一字段做的条件;

  主要参考资料:

  http://docs.mongodb.org/manual/

  https://github.com/mongodb/node-mongodb-native

  MongoDB权威指南

此系列的源代码可到http://bijian1013.iteye.com/blog/2425085下载。

文章来源:https://www.cnblogs.com/zhongweiv/p/node_mongodb.html

Nodejs学习笔记(十)—与MongoDB的交互(mongodb/node-mongodb-native)、MongoDB入门的更多相关文章

  1. Nodejs学习笔记(一)--- 简介及安装Node.js开发环境

    目录 学习资料 简介 安装Node.js npm简介 开发工具 Sublime Node.js开发环境配置 扩展:安装多版本管理器 学习资料 1.深入浅出Node.js http://www.info ...

  2. Nodejs学习笔记(一)—简介及安装Node.js开发环境

    一.简介 Node.js是让Javascript脱离浏览器运行在服务器的一个平台,不是语言: Node.js采用的Javascript引擎是来自Google Chrome的V8:运行在浏览器外不用考虑 ...

  3. 【转】Nodejs学习笔记(一)--- 简介及安装Node.js开发环境

    目录 学习资料 简介 安装Node.js npm简介 开发工具 Sublime Node.js开发环境配置 扩展:安装多版本管理器 学习资料 1.深入浅出Node.js http://www.info ...

  4. nodejs学习笔记(一):centos7安装node环境

    由于windows环境安装nodejs只需要访问官方网站下载压缩包,解压即可. 首先检查自己是否安装==wget==,已安装可以跳过这步,未安装则需要先安装: linux yum install -y ...

  5. Nodejs学习笔记(四)——支持Mongodb

    前言:回顾前面零零碎碎写的三篇挂着Nodejs学习笔记的文章,着实有点名不副实,当然,这篇可能还是要继续走着离主线越走越远的路子,从简短的介绍什么是Nodejs,到如何寻找一个可以调试的Nodejs ...

  6. Nodejs学习笔记(十五)--- Node.js + Koa2 构建网站简单示例

    目录 前言 搭建项目及其它准备工作 创建数据库 创建Koa2项目 安装项目其它需要包 清除冗余文件并重新规划项目目录 配置文件 规划示例路由,并新建相关文件 实现数据访问和业务逻辑相关方法 编写mys ...

  7. Nodejs学习笔记(十六)--- Pomelo介绍&入门

    目录 前言&介绍 安装Pomelo 创建项目并启动 创建项目 项目结构说明 启动 测试连接 聊天服务器 新建gate和chat服务器 配置master.json 配置servers.json ...

  8. [转]Nodejs学习笔记(十五)--- Node.js + Koa2 构建网站简单示例

    本文转自:https://www.cnblogs.com/zhongweiv/p/nodejs_koa2_webapp.html 目录 前言 搭建项目及其它准备工作 创建数据库 创建Koa2项目 安装 ...

  9. Nodejs学习笔记(十六)—Pomelo介绍&入门

    前言&介绍 Pomelo:一个快速.可扩展.Node.js分布式游戏服务器框架 从三四年前接触Node.js开始就接触到了Pomelo,从Pomelo最初的版本到现在,总的来说网易出品还算不错 ...

  10. Nodejs学习笔记(十五)—Node.js + Koa2 构建网站简单示例

    前言 前面一有写到一篇Node.js+Express构建网站简单示例:http://www.cnblogs.com/zhongweiv/p/nodejs_express_webapp.html 这篇还 ...

随机推荐

  1. hdu 4993

    http://acm.hdu.edu.cn/showproblem.php?pid=4993 满足ax + by = c的x,y对数 水题,暴力 #include <cstdio> #in ...

  2. 循环读取list 的几种方法?

    1.最常用的方法.循环找出该位子的list元素for(int i = 0;i < list.size(); i ++){System.out.println(list.get(i));}2.利用 ...

  3. 章文嵩博士和他背后的负载均衡(LOAD BANLANCER)帝国

    案首语: 阿里集团技术大牛,@正明,淘宝基础核心软件研发负责人.LVS创始人.阿里云首席科学家章文嵩博士从阿里离职,去追求技术人生另一段历程,让阿里像我一样的很多热爱技术的工程师都有一丝牵动和感触. ...

  4. 使用VSTS进行单元测试练习

    本次作业要求:练习教科书第22~25页单元测试练习,要求自行安装Visual Studio开发平台,版本至少在2010以上,要求把程序安装过程和练习过程写到博客上,越详细越好,要图文并茂,没有书的同学 ...

  5. NET 时间字符串转换

    // 把指定格式的日期字符串转换为时间:2018/11/1 0:00:00 DateTime.ParseExact("2018a11","yyyyaMM",Sy ...

  6. C# InDepth 第一章

    深入理解C#第一部分,第一章介绍了C#开发得进化史. 1 从数据类型定义引入c#1到4中得改变 c#2:强类型集合(泛型) c#3:自动实现得属性和简化得初始化 c#4:命名实参 2 排序和过滤 排序 ...

  7. 安装webpack常见错误之一

    我安装webpack时,出现如下错误: C:\Users\admin> npm install webpack -gnpm WARN checkPermissions Missing write ...

  8. 记录.NET Core部署到Linux之.NET Core环境搭建(1)

    1.在安装.NET之前,您需要注册Microsoft密钥.注册产品存储库和安装所需的依赖项. 启动我们的虚拟机,输入以下命令: sudo rpm -Uvh https://packages.micro ...

  9. C#跨线程操作UI

    WPF启动调度器 : Dispatcher.Invoke(new Action(() => { //你的代码 }));

  10. 通过NuGet安装和配置ODP.NET(Oracle Data Provider for .NET)

    前言 本文涉及ODP.NET.ODP.NET的托管(managed)驱动.Entity Framework的托管驱动 这三部分的下载.安装.配置. 1.简介 NuGet 是.NET的软件开发包管理工具 ...