//从现在开始,我们要学习的就是关于Node.js与mongoDB的联合
首先我们要做的就是在node环境里面下载mongodb 顺便安装上依赖
1、首先要做的就是进入项目

>>d:
>>cd D:\Documents\HBuilderProject\node\js\mongoNode


2、然后安装

cnpm install mongodb --save


3、创建一个文件 比如名字叫sqltest.js,并在里面引入mongodb的客户端
var MongoClient = require('mongodb').MongoClient;
4、找到数据库(这里要注意,我们以前用的是http协议或者是https协议,这里是mongodb协议)

var DB_CONN_STR = 'mongodb://localhost:27017/movies';


5、连接数据库

MongoClient.connect(DB_CONN_STR, function(err, db) {
 if(err){
 console.log(err)
 }else{
 console.log('数据库连接成功!')
 }
})


这里要注意一下,如果这里先把mongoDB的两个命令窗口给关了,这里再运行node sqltest.js的时候,就会报错,提示我们没有连上localhost:27017!
6、接着连接成功之后就像要想证删改查啦! 【这里注意一下,除了find查询数据外,其他三个方法都有回调函数。只有find需要先toArray】
因为我们的函数里面已经有db的参数了,所以我们先打印一下

db
MongoClient.connect(DB_CONN_STR, function(err, db) {
 if(err){
 console.log(err)
 }else{
 console.log('数据库连接成功!')
 console.log(db);
 }
})


会的出来一堆的数据,包括数据库什么的~
这个时候,我们要连接数据库的其中一张表: var collection = db.collection('list');
//这里必须记录一下了!当我使用console.log(db.collection('list'));的时候,命令窗口一直显示的是db.collection is not a function
后来查了一下说是版本的原因,然后我就去mongoNode下面的package.json里面,把原来的

{
 "dependencies": {
 "mongodb": "^^2.2.33"
 }
}
改为了
{
 "dependencies": {
 "mongodb": "^2.2.33"
 }
}
竟然就成功了!也是醉了···神坑呀神坑!
出来之后应该是这样子的:
Collection {
//s:这里都省略
}


上面的Collection就恰恰说明了已经成功!

6.1:增加数据>还是原来的配方,还是熟悉的味道,依然是我们的insert。
1)增一条数据

insertData:function(db,collectionName,data){//这里的data为对象
 db.collection(collectionName).insert(data,function(err,result){
 if(err){
 console.log(err)
 }else{
 console.log('ok!');
 }
 })
 }


var data = {"name":"菜鸟教程","url":"www.runoob.com"},{"name":"菜鸟工具","url":"c.runoob.com"};
 collection.insert(data);


2)增加多条,这个就简单啦

var data = [{"name":"菜鸟教程","url":"www.runoob.com"},{"name":"菜鸟工具","url":"c.runoob.com"}];
collection.insertMany(data,function(){err,result});


3)模块化开发
就是将函数全部封装在MySql.js里面,然后进行暴露:module.exports = MySql,然后在sql.js里面引入:var MySql = require('./MySql.js');
然后就可以直接执行啦!
这里要注意,我们的函数中的那个MySql.insertData(db,'list',data)的list,有则插入,无责自己生成后插入。

6.2:查询数据

toArray
findData:function(db,collectionName,searchObj,showObj){
 db.collection(collectionName).find(searchObj,showObj).toArray(function(err, result) {
 if(err){
 console.log('Error:'+ err);
 }else{
 console.log(result);
 }
 });
 }


结果是:
[ { title: '肖申克的救赎' },
····//中间的省略
{ title: '肖申克的救赎' } ]

6.3:更新数据
1)更新一条

updateData:function(db,collectionName,whereObj,updateObj){
 db.collection(collectionName).update(whereObj,updateObj,function(err,result){
 if(err){
 console.log('Error:'+ err);
 }else{
 console.log(result);
 }
 })
 }
MySql.updateData(db,'list',{year:'1994'},{$set:{year:'1000'}});


2)更新多条
MySql.updateManyData(db,'list',{year:'1994'},{$set:{year:'1000'}});
由此可以看出,对于更新来讲,一个和多个其实函数是一样的,就看你调用的时候怎么写了
一般来讲,更新多条不是在里面写一个数组,而是一个判断条件!
db.list.updateMany({year:{$lt:'1995'}},{$set:{year:'1000'}})

6.4:删除数据
1)删除一条

deleteData:function(db,collectionName,deleteObj){
 db.collection(collectionName).deleteOne(deleteObj,function(err,result){
 if(err){
 console.log(err)
 }else{
 console.log('delete ok!');
 }
 })
 }


MySql.deleteData(db,'list',{title:'肖声克的救赎'});
2)删除多条
MySql.deleteManyData(db,'list',{title:'肖声克的救赎'});
这个和更新是一样的

但是我们要考虑到一个问题,这个console.log是不能写唯一的,所以我们要有一个回调函数!

callback
//查询数据
 findData:function(db,collectionName,searchObj,showObj,callback){
 db.collection(collectionName).find(searchObj,showObj).toArray(function(err, result) {
 if(err){
 console.log('Error:'+ err);
// return;
 }else{
// console.log(result);
 callback(result);
 }
 });
 }
 MySql.findData(db,'list',{},{title:1,'_id':0},function(result){
 console.log(result)
 });

接下来我们就要学习写页面了!