简介

  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/

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 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 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 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 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();
});
});
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();
});
});
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();
});
});

MongoDB入门 和nodejs操作的更多相关文章

  1. MongoDB入门---文档操作之增删改

    之前的两篇文章,已经分享过关于MongoDB的集合还有数据库的各种操作,接下来就涉及到最主要的喽,那就是数据方面的操作,在这里叫做文档操作.话不多说,大家来看正文.     首先来看一下它的数据结构: ...

  2. Nodejs学习笔记(十)--- 与MongoDB的交互(mongodb/node-mongodb-native)、MongoDB入门

    目录 简介 MongoDB安装(windows) MongoDB基本语法和操作入门(mongo.exe客户端操作) 库操作 插入 查询 修改 删除 存储过程 nodejs操作MongoDB 插入 查询 ...

  3. Nodejs学习笔记(十)—与MongoDB的交互(mongodb/node-mongodb-native)、MongoDB入门

    简介 MongoDB 开源,高性能的NoSQL数据库:支持索引.集群.复制和故障转移.各种语言的驱动程序:高伸缩性: NoSQL毕竟还处于发展阶段,也有说它的各种问题的:http://coolshel ...

  4. nodejs操作mongodb

    一.下载地址 https://www.mongodb.com/download-center#community 二.控制台操作mongodb 1.安装完后添加环境变量. 2.在某个根目录下新建dat ...

  5. NodeJs操作MongoDB之分页功能与常见问题

    NodeJs操作MongoDB之分页功能与常见问题 一,方法介绍 1,聚合操作之count count()方法可以查询统计符合条件的集合的总数 db.User.count(<query>) ...

  6. NodeJs操作MongoDB之多表查询($lookup)与常见问题

    NodeJs操作MongoDB之多表查询($lookup)与常见问题 一,方法介绍 aggregate()方法来对数据进行聚合操作.aggregate()方法的语法如下 1 aggregate(ope ...

  7. nodejs 操作mongodb, 增删改查

    很久没有学node了,之前书看了一半,今天继续学发现版本问题很坑爹,按书例子执行一堆错误.想学nodejs操作db,百度半天,一堆sb写神马鸟玩儿?简简单单写一大堆还运行不了的.需要代码也是看别人写的 ...

  8. MongoDB学习day06--高级查询aggregate聚合管道和nodejs操作aggregate

    一.MongoDB聚合管道(Aggregation Pilpeline) 使用聚合管道可以对集合中的文档进行变换和组合. 主要功能:表的关联查询.数据统计 二.aggregate 管道操作符与表达式 ...

  9. koa 基础(二十一)nodejs 操作mongodb数据库 --- 查询数据

    1.app.js /** * nodejs 操作mongodb数据库 * 1.安装 操作mongodb * cnpm install mongodb --save * 2.引入 mongodb 下面的 ...

随机推荐

  1. Const vs. Readonly

    Const 被const修饰的变量不能为静态,因为const实际隐式上已经是静态变量. const变量在声明时就必须进行初始化,否则会有编译错误. const变量的赋值是发生在编译期间 Readonl ...

  2. zabbix(2-server-agent)

    注意:以下步骤都是在LAMP配置之后进行的. 关于LAMP环境的简单快速搭建,见博客:http://afterdawn.blog.51cto.com/7503144/1923139 下面开始介绍在Ce ...

  3. linux找到目录下所有目录文件

    想要删除掉该目录下的所有文件类型是目录的文件? 这样运行: $ ls -F | grep /$ | xargs rm -rf ls 中F参数,作用是能把目录文件的名字后边加上一个斜杠/ 然后匹配以斜杠 ...

  4. CentOS 6.8 虚拟机安装详解

    第一步:安装 VMware 官方网站:www.vmware.com 下载百度云链接:http://pan.baidu.com/s/1bphDOWv 密码:0zix VMware 是一个虚拟 PC 的软 ...

  5. BZOJ4999: This Problem Is Too Simple!树链剖分+动态开点线段树

    题目大意:将某个节点的颜色变为x,查询i,j路径上多少个颜色为x的点... 其实最开始一看就是主席树+树状数组+DFS序...但是过不去...MLE+TLE BY FCWWW 其实树剖裸的一批...只 ...

  6. Postman无法正常启动解决办法

    问题描述: 应用程序窗口能够打开,但就是这样一直空白,什么都不显示.接下来,主窗口以纯白色加载,不显示任何其他内容. 接下来主窗口背景米色加载和菜单栏加载和工作.应用程序将永远保持这样, 有时界面会变 ...

  7. XSS Challenges练习及解答

    一个偶然的机会在知道创宇的技能表里看到了一个练习XSS的网站http://xss-quiz.int21h.jp,正好想研究这个,于是试着做了一下. 第一.二题是最简单的,直接在搜索框中输入以下代码就成 ...

  8. Luogu P1726 上白泽慧音

    这显然是一道求强连通分量(SCC)的题目. 只要你正常,都知道应该写Tarjan. 然后(假装会写Tarjan),其实我当然不会.但是求SCC还有另一个算法.复杂度和Tarjan一样,只不过常数大了点 ...

  9. R语言学习 第二篇:矩阵和数组

    向量是一维的,只有行这一个维度,没有其他维度.R可以创建更高维度的数据对象,例如,矩阵.数据框.数组,索引高维度的对象时,需要使用元素的下标.这些对象的下标都使用中括号[]和索引,第一个维度是row, ...

  10. 基于.NET的3D开发框架/工具比较

    好久木有写博客了,这么日子以来忙忙碌碌的,也没大有时间潜心学习和梳理.最近刚好接手一个3D显示的活,虽然还没怎么弄明白,但是也看过一些方案,走了一些弯路,经过一些浅显的了解(3D Display这里面 ...