day04

mongoDB数据库使用

  1. 电脑全局安装数据库

  2. 开机命令mongod --dbpath c:\mongo;

    1. --dbpath 就是选择数据库文档所在的文件夹, 也就是说,mongoDB中,真的有物理文件(开机后文件夹会多出很多文件),对应一个个数据库。U盘可以拷走(.ns文件)。
    2. 一定要保持,开机这个CMD不能动了,不能ctrl+c打断。
  3. 管理数据库 : mongo

    应该再开一个cmd输入mongo;

  4. 数据库命令

    1. 列出所有数据库:show dbs
    2. 使用某个数据库: use 数据库名字
    3. 新建:use一个不存在的,就是新建。

      -- 必须插入一个数据,这个数据库才真创建成功
    4. 查看当前所在数据库: db
    5. 删除当前所在的数据库: db.dropDatabase()
  5. 插入数据

    1. 数据库中不能直接插入数据,只能往集合(collections)中插入数据。不需要创建集合,只需要写点语法:
      db.student.insert({“name”:”xiaoming”})

      db.student 系统发现student是一个陌生的集合名字,所以就自动创建此集合。

    2. 导入数据库:
      mongoimport --db aaa --collection bbb --drop --file primer-dataset.json
      
      --db aaa  想往哪个数据库里面导入
      --collection bbb 想往哪个集合中导入
      --drop 把集合清空
      --file primer-dataset.json 导入哪个文件
  6. 查找数据 db.restaurants.find()

    1. find中没有参数,那么将列出这个集合的所有文档
    2. 精确匹配:db.student.find({"score.shuxue":70});
    3. 多个条件:db.student.find({"score.shuxue":70 , "age":12})
    4. 大于条件:db.student.find({"score.yuwen":{$gt:50}});
    5. 或者:寻找所有年龄是9岁,或者11岁的学生

      db.student.find({$or:[{"age":9},{"age":11}]});
    6. 排序:查找完毕之后,打点调用sort,表示升降排序。

      db.restaurants.find().sort( { "borough": 1, "address.zipcode": -1 } )
  7. 修改数据

    修改里面还有查询条件。你要改谁,要告诉mongo。

    1. 查找名字叫做小明的,把年龄更改为16岁:

      db.student.update({"name":"小明"},{$set:{"age":16}});
    2. 更改所有匹配项目:

      db.student.update({"sex":"男"},{$set:{"age":33}},{multi: true});
    3. 完整替换整条数据:不出现$set关键字了

      db.student.update({"name":"小明"},{"name":"大明","age":16});
  8. 删除集合 db.students.drop()

  9. 删除数据

    1. 默认都删:

      db.restaurants.remove( { "borough": "Manhattan" } )
    2. 只删一条;

      db.restaurants.remove( { "borough": "Queens" }, { justOne: true } )

day05

node使用mongoDB数据库

var express = require("express");
var app = express();
var MongoClient = require('mongodb').MongoClient; app.get("/",function(req,res){ // url就是数据库的地址.
// 假如数据库不存在,没有关系,程序会帮你自动创建一个数据库
var url = 'mongodb://localhost:27017/haha';
// **连接数据库
MongoClient.connect(url, function(err, db) {
//回调函数表示连接成功做的事情,db参数就是连接上的数据库实体
if(err){
console.log("数据库连接失败");
return;
}
//插入数据,集合如果不存在,也没有关系,程序会帮你创建
db.collection('student').insertOne({
"name" : "哈哈",
"age" : parseInt(Math.random() * 100 + 10)
}, function(err, result) {
if(err){
console.log("插入失败");
return;
}
//插入之后做的事情,result表示插入结果。
//console.log(result);
res.send(result);
db.close();
});
});
}); app.listen(3000);

封装DAO

// setting.js
module.exports = {
"dburl" : "mongodb://localhost:27017/haha"
} //这个模块里面封装了所有对数据库的常用操作
var MongoClient = require('mongodb').MongoClient;
var settings = require("../settings.js");
//不管数据库什么操作,都是先连接数据库,所以我们可以把连接数据库
//封装成为内部函数
function _connectDB(callback) {
var url = settings.dburl; //从settings文件中,都数据库地址
//连接数据库
MongoClient.connect(url, function (err, db) {
if (err) {
callback(err, null);
return;
}
callback(err, db);
});
} //插入数据
exports.insertOne = function (collectionName, json, callback) {
_connectDB(function (err, db) {
db.collection(collectionName).insertOne(json, function (err, result) {
callback(err, result);
db.close(); //关闭数据库
})
})
}; //查找数据,找到所有数据。args是个对象{"pageamount":10,"page":10}
exports.find = function (collectionName, json, C, D) {
var result = []; //结果数组
if (arguments.length == 3) {
//那么参数C就是callback,参数D没有传。
var callback = C;
var skipnumber = 0;
//数目限制
var limit = 0;
} else if (arguments.length == 4) {
var callback = D;
var args = C;
//应该省略的条数
var skipnumber = args.pageamount * args.page || 0;
//数目限制
var limit = args.pageamount || 0;
//排序方式
var sort = args.sort || {};
} else {
throw new Error("find函数的参数个数,必须是3个,或者4个。");
return;
} //连接数据库,连接之后查找所有
_connectDB(function (err, db) {
var cursor = db.collection(collectionName).find(json).skip(skipnumber).limit(limit).sort(sort);
cursor.each(function (err, doc) {
if (err) {
callback(err, null);
db.close(); //关闭数据库
return;
}
if (doc != null) {
result.push(doc); //放入结果数组
} else {
//遍历结束,没有更多的文档了
callback(null, result);
db.close(); //关闭数据库
}
});
});
} //删除
exports.deleteMany = function (collectionName, json, callback) {
_connectDB(function (err, db) {
//删除
db.collection(collectionName).deleteMany(
json,
function (err, results) {
callback(err, results);
db.close(); //关闭数据库
}
);
});
} //修改
exports.updateMany = function (collectionName, json1, json2, callback) {
_connectDB(function (err, db) {
db.collection(collectionName).updateMany(
json1,
json2,
function (err, results) {
callback(err, results);
db.close();
});
})
} exports.getAllCount = function (collectionName,callback) {
_connectDB(function (err, db) {
db.collection(collectionName).count({}).then(function(count) {
callback(count);
db.close();
});
})
}

nodeCZBK-笔记2的更多相关文章

  1. git-简单流程(学习笔记)

    这是阅读廖雪峰的官方网站的笔记,用于自己以后回看 1.进入项目文件夹 初始化一个Git仓库,使用git init命令. 添加文件到Git仓库,分两步: 第一步,使用命令git add <file ...

  2. js学习笔记:webpack基础入门(一)

    之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...

  3. SQL Server技术内幕笔记合集

    SQL Server技术内幕笔记合集 发这一篇文章主要是方便大家找到我的笔记入口,方便大家o(∩_∩)o Microsoft SQL Server 6.5 技术内幕 笔记http://www.cnbl ...

  4. PHP-自定义模板-学习笔记

    1.  开始 这几天,看了李炎恢老师的<PHP第二季度视频>中的“章节7:创建TPL自定义模板”,做一个学习笔记,通过绘制架构图.UML类图和思维导图,来对加深理解. 2.  整体架构图 ...

  5. PHP-会员登录与注册例子解析-学习笔记

    1.开始 最近开始学习李炎恢老师的<PHP第二季度视频>中的“章节5:使用OOP注册会员”,做一个学习笔记,通过绘制基本页面流程和UML类图,来对加深理解. 2.基本页面流程 3.通过UM ...

  6. NET Core-学习笔记(三)

    这里将要和大家分享的是学习总结第三篇:首先感慨一下这周跟随netcore官网学习是遇到的一些问题: a.官网的英文版教程使用的部分nuget包和我当时安装的最新包版本不一致,所以没法按照教材上给出的列 ...

  7. springMVC学习笔记--知识点总结1

    以下是学习springmvc框架时的笔记整理: 结果跳转方式 1.设置ModelAndView,根据view的名称,和视图渲染器跳转到指定的页面. 比如jsp的视图渲染器是如下配置的: <!-- ...

  8. 读书笔记汇总 - SQL必知必会(第4版)

    本系列记录并分享学习SQL的过程,主要内容为SQL的基础概念及练习过程. 书目信息 中文名:<SQL必知必会(第4版)> 英文名:<Sams Teach Yourself SQL i ...

  9. 2014年暑假c#学习笔记目录

    2014年暑假c#学习笔记 一.C#编程基础 1. c#编程基础之枚举 2. c#编程基础之函数可变参数 3. c#编程基础之字符串基础 4. c#编程基础之字符串函数 5.c#编程基础之ref.ou ...

  10. JAVA GUI编程学习笔记目录

    2014年暑假JAVA GUI编程学习笔记目录 1.JAVA之GUI编程概述 2.JAVA之GUI编程布局 3.JAVA之GUI编程Frame窗口 4.JAVA之GUI编程事件监听机制 5.JAVA之 ...

随机推荐

  1. Excel催化剂开源第34波-SM.MS图床API调用(用POST上传multipart/form-data内容)

    日常做网抓数据,都是以GET请求为主,偶尔遇到需要POST请求的,一般POST的参数只是一串字符串就可以了,通过构造字符串也很容易完成,但此次SM.MS的API接口要求是Content-Type: m ...

  2. python自动化测试之DDT数据驱动

    时隔已久,再次冒烟,自动化测试工作仍在继续,自动化测试中的数据驱动技术尤为重要,不然咋去实现数据分离呢,对吧,这里就简单介绍下与传统unittest自动化测试框架匹配的DDT数据驱动技术. 话不多说, ...

  3. 小白学python-day05(2)-列表及其操作

    今天是day05(2),以下是学习总结 但行努力,莫问前程. --------------------------------------------------------------------- ...

  4. python找质数对

    python找质数对 编写python脚本,输入一个正整数,输出有几对质数的和等于这个正整数. 例如输入一个正整数10,可以找出有“3+7=10”.“5+5=10”两个质数对的和为10. 要实现这个功 ...

  5. 14. 流、文件和IO

    前言 InputStream/OutStream流用来处理设备之间的数据传输 Java.io 包几乎包含了所有操作输入.输出需要的类.所有这些流类代表了输入源和输出目标. Java.io 包中的流支持 ...

  6. SpringBoot Kafka 整合使用

    前提 假设你了解过 SpringBoot 和 Kafka. 1.SpringBoot 如果对 SpringBoot 不了解的话,建议去看看 DD 大佬 和 纯洁的微笑 的系列博客. 2.Kafka K ...

  7. 【转载】C/C++中long long与__int64的区别

    在C99标准(详情请猛击:C语言的发展及其版本)中,增加了对64位长整型数据的支持,它的类型就是 long long,占用8个字节. 由于C99标准发布较晚,一些较老的C/C++编译器不支持,新编译器 ...

  8. Ubuntu 系统如何用pycharm开发python—OpenCV

  9. H3C模拟器单臂路由配置实例

    单臂路由:用802.1Q和子接口实现VLAN间路由 单臂路由利用trunk链路允许多个VLAN的数据帧通过而实现 网络拓扑图: RTA配置: SW1配置: PC1/2配置如图: 但是值得注意的是,在配 ...

  10. Selenium模拟登陆百度贴吧

    Selenium模拟登陆百度贴吧 from selenium import webdriver from time import sleep from selenium.webdriver.commo ...