mongodb学习(2)--- nodeJS与MongoDB的交互(使用mongodb/node-mongodb-native)
转载:http://www.cnblogs.com/zhongweiv/p/node_mongodb.html
目录
- 简介
- MongoDB安装(windows)
- MongoDB基本语法和操作入门(mongo.exe客户端操作)
- 库操作
- 插入
- 查询
- 修改
- 删除
- 存储过程
- nodejs操作MongoDB
- 插入
- 查询
- 修改
- 删除
- 调用存储过程
- 写在之后...
简介:MongoDB
开源,高性能的NoSQL数据库;支持索引、集群、复制和故障转移、各种语言的驱动程序;高伸缩性;
NoSQL毕竟还处于发展阶段,也有说它的各种问题的:http://coolshell.cn/articles/5826.html
API Docs:http://docs.mongodb.org/manual/
node-mongodb-native
mongodb的nodejs驱动;
GitHub地址:https://github.com/mongodb/node-mongodb-native
MongoDB安装(windows):参考前文nodeJS学习(7)--- WS开发 NodeJS 项目-节2 <安装&设置&启动 mongodb 数据库++遇到的问题>
MongoDB基本语法和操作入门(mongo.exe客户端操作)
MongoDB已经安装好,下面先对 MongoD B进行一个简单的入门,再用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});
: 表示升序
-:表示降序
- 指定字段返回: db.表名.find({},{"字段名":0});
:返回
:不返回 # 如下: _id 不返回,即不显示 _id。
示例:
查询就讲到这里了,感觉查询示例一下讲不完,还有些高级查询,大家自行去了解一下吧^_^!
修改
前面 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
安装成功后,继续在上面操作创建的库和表中操作
- 插入
示例:使用 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":},{"name":'wilson002',"age":}];
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" : }};
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没有做更深的讲解,原因是针对它的进行再次封装的东西很多,且更利于编程实现,比如:mongoose、mongoskin、mongolian等等,应用性不错;
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学习(2)--- nodeJS与MongoDB的交互(使用mongodb/node-mongodb-native)的更多相关文章
- MongoDB学习(五)使用Java驱动程序3.3操作MongoDB快速入门
[引言] 毕竟现在MongoDB还是出于成长阶段,所以现在网上相关的资料很少,而且大部分还都是针对于MongoDB的老版本的.再加上MongoDB的频繁升级.重大更新等等,导致菜鸟学习的难度增大. 好 ...
- MongoDB学习笔记系列
回到占占推荐博客索引 该来的总会来的,Ef,Redis,MVC甚至Sqlserver都有了自己的系列,MongoDB没有理由不去整理一下,这个系列都是平时在项目开发时总结出来的,希望可以为各位一些帮助 ...
- mongodb学习(1) 第一次开启 mongdb
1.启动mongdb 可以设置为开机启动 mongod -dbpath=/data/mongodb --fork --port 27017 --logpath=/usr/local/mongodb/l ...
- MongoDB学习笔记系列~目录
MongoDB学习笔记~环境搭建 (2015-03-30 10:34) MongoDB学习笔记~MongoDBRepository仓储的实现 (2015-04-08 12:00) MongoDB学习笔 ...
- MongoDB学习day06--高级查询aggregate聚合管道和nodejs操作aggregate
一.MongoDB聚合管道(Aggregation Pilpeline) 使用聚合管道可以对集合中的文档进行变换和组合. 主要功能:表的关联查询.数据统计 二.aggregate 管道操作符与表达式 ...
- mongodb学习(3)--- NodeJs使用mongoose操作mongodb
转载: https://cnodejs.org/topic/50c145ed637ffa4155c7eaee 首先对于以下错误说明(有写 db.close): Error: db object alr ...
- mongoDB 学习笔记纯干货(mongoose、增删改查、聚合、索引、连接、备份与恢复、监控等等)
最后更新时间:2017-07-13 11:10:49 原始文章链接:http://www.lovebxm.com/2017/07/13/mongodb_primer/ MongoDB - 简介 官网: ...
- MongoDB入门 和nodejs操作
简介 MongoDB 开源,高性能的NoSQL数据库:支持索引.集群.复制和故障转移.各种语言的驱动程序:高伸缩性: NoSQL毕竟还处于发展阶段,也有说它的各种问题的:http://coolshel ...
- MongoDB学习day04--NodeJs操作数据库增删改查
一.在Nodejs中使用Mongodb Nodejs需要引入的包 npm install mongodb --save -dev 或者使用镜像 cnpm install mongodb --save ...
- MongoDB学习笔记:快速入门
MongoDB学习笔记:快速入门 一.MongoDB 简介 MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统.在高负载的情况下,添加更多的节点,可以保证服务器性能.M ...
随机推荐
- Bootstrap历练实例:popover插件中的方法
方法 下面是一些弹出框(Popover)插件中有用的方法: 方法 描述 实例 Options: .popover(options) 向元素集合附加弹出框句柄. $().popover(options) ...
- C#箴言之用属性来访问类的私有成员
在程序中,难免要访问某个对象的私有成员.那么以前实现这类功能的方法有两种,第一种方法最简单,就是把成员访问符从“private”改为“public”即可:而另一个就是提供公有的成员访问函数来进行访问. ...
- NodeJS--exports和module.exports
继续迁移印象笔记中记录相关笔记,其实工作中遇到的很多问题当时解决了,后期就忘记了,多记录还是很有用的,好记性不如烂笔头嘛,以后要养成好习惯. NodeJS中 require 用来加载代码,而 expo ...
- Linux IO调度方法
目录 I/O调度的4种算法 I/O调度程序的测试 ionice IO调度器的总体目标是希望让磁头能够总是往一个方向移动,移动到底了再往反方向走,这恰恰就是现实生活中的电梯模型,所以IO调度器也被叫做电 ...
- commons-logging日志实现解耦
一.需要解耦 日志是实际应用中的一个重要部分,日志系统也有许多开源的实现,如java.util.logging, logback, log4j系列等. 在使用日志系统时,如果与具体 ...
- 模型类序列化器ModelSerializer
定义 比如我们创建一个BookInfoSerializer class BookInfoSerializer(serializers.ModelSerializer): ""&qu ...
- 问题 B: 分组统计
分组统计 问题 B: 分组统计时间限制: 1 Sec 内存限制: 32 MB 提交: 416 解决: 107 [提交][状态][讨论版][命题人:外部导入] 题目描述 先输入一组数,然后输入其分组,按 ...
- 第 8 章: 模块, 包与分发---Word
第八章: 模块, 包 与 分发 描述: 大型Python程序以模块和包的形式组织.另外,Python标准库中包含大量模块.本章详细介绍模块和包系统.还将提供有关如何安装第三方模块和分发源代码的信息. ...
- Ubuntu下的定时备份数据库
1.编写备份数据库的shell脚本 mysqldump -uUserName -pPassword dbName >/XXX/XXXX/XXXX/fileName_$(date +%Y%m%d_ ...
- SharedPreferences使用(通过键值保存数据)
保存数据到SharedPreferences中 要想使用SharedPreferences来存储数据, 首先需要获取到SharedPreferences对象. Android中主要提供了三种方法用于得 ...