mongodb和mongoose

录:mongodb

一、安装及配置mongodb
二、启动服务时能够指定db的路径和端口
三、基本概念
四、基本指令
五、数据库的CRUD(增删改查)的操做
六、安装图形化工具
七、文档之间的关系
八、sort和投影
九、mongoose
十、经过mongoose链接MongoDB
十一、mongoose之Schema和Model
十二、mongoose的增长,查询方法
1三、mongoose的Document对象数据库

 

一、安装及配置mongodb    <--返回目录npm

  1)下载安装包:mongodb-win32-x86_64-2008plus-ssl-3.2.4-signed.msi数组

  2)配置pathmongoose

  3)cmd 执行 mongod命令工具

  4)在d盘新建 data/db 目录ui

  5)cmd 执行mongod命令,启动服务,出现提示:waiting for connections on port 27017; 不要关闭该窗口spa

  6)新开一个cmd窗口,执行mongo命令,链接服务code

 

二、启动服务时能够指定db的路径和端口    <--返回目录对象

  mongod --dbpath d:\xxx\data\db --port 10086

  

三、基本概念    <--返回目录
  1) 数据库(database)
  2) 集合(collection)
  3) 文档(document)
  在MongoDB中,数据库和集合都不须要手动建立,当咱们建立文档时,若是文档所在的集合或数据库不存在会自动建立数据库和集合

 

四、基本指令    <--返回目录
        show dbs
        show databases
            - 显示当前的全部数据库
        use 数据库名
            - 进入到指定的数据库中
        db
            - db表示的是当前所处的数据库
        show collections
            - 显示数据库中全部的集合

 

五、数据库的CRUD(增删改查)的操做    <--返回目录

  向数据库中插入文档 insert, insertOne, inserMany

- 向集合中插入一个文档 db.<collection>.insert(doc) - 例子:向test数据库中的,stu集合中插入一个新的学生对象{name:"xxx", age:20, gender:"男"} db.stu.insert({name:"xxx",age:20, gender:"男"})

- 插入多个文档
- db.stu.insert([{name:"xxx",age:20, gender:"男"}, {...}])

  查询集合中的全部的文档

db.<collection>.find()

   条件查询 find 返回一个数组, findOne 返回一个文档对象

db.<collection>.find({name: 'xxx'})
db.<collection>.find({age: {$gt: 10}})

  统计count

db.<collection>.find().count()

  修改 update默认只更新一条记录(默认同updateOne), updateOne, updateMany

/* 默认状况下会使用新对象来替换旧对象 */ db.stu.update({gender: ''},{gender: 'male'})
/* 修改指定字段 */ db.stu.update({gender: ''},{$set: {gender: 'male'}})

  删除 remove(默认同deleteMany), deleteOne, deleteMany

/* 删除多个 */ db.stu.remove({gender: ''})
/* 删除一个 */
db.stu.remove({gender: 'xx'}, true)
/* 删除全部,清空集合 */
db.stu.remove({})
/* 删除集合 */
db.stu.drop()

  

六、安装图形化工具    <--返回目录

  安装包:mongodbmanagerfree_inst.exe 或 studio-3t-x64.msi

 

七、文档之间的关系    <--返回目录

  一对一(one to one): 在MongoDB,能够经过内嵌文档的形式来体现出一对一的关系

db.wifeAndHusband.insert([ { name:"黄蓉", husband:{ name:"郭靖" } }, {...} ]);

  一对多(one to many)或多对一(many to one)

db.users.insert([{_id:1, username:"zs1"},{_id:2, username:"zs2"}]); db.order.insert({ list:["牛肉","漫画"], user_id: 1 }); db.users.find() db.order.find()

  多对多(many to many)

db.teachers.insert([ {name:"洪七公"}, {name:"黄药师"}, {name:"龟仙人"} ]); db.stus.insert([ { name:"郭靖", tech_ids:[ ObjectId("59c4806d241d8d36a1d50de4"), ObjectId("59c4806d241d8d36a1d50de5") ] },{ name:"孙悟空", tech_ids:[ ObjectId("59c4806d241d8d36a1d50de4"), ObjectId("59c4806d241d8d36a1d50de5"), ObjectId("59c4806d241d8d36a1d50de6") ] } ]) db.teachers.find() db.stus.find()

 

 八、sort和投影    <--返回目录

//查询文档时,默认状况是按照_id的值进行排列(升序) //sort()能够用来指定文档的排序的规则,sort()须要传递一个对象来指定排序规则 1表示升序 -1表示降序 //limit skip sort 能够以任意的顺序进行调用
db.emp.find({}).sort({sal:1,empno:-1}); //在查询时,能够在第二个参数的位置来设置查询结果的 投影,指定查询的字段
db.emp.find({},{ename:1 , _id:0 , sal:1}); // 1查询,0不查询

 

九、mongoose    <--返回目录

  mongoose中为咱们提供了几个新的对象
        – Schema(模式对象): Schema对象定义约束了数据库中的文档结构
        – Model: Model对象做为集合中的全部文档的表示,至关于MongoDB数据库中的集合collection
        – Document: Document表示集合中的具体文档,至关于集合中 的一个具体的文档

 

十、经过mongoose链接MongoDB    <--返回目录

  使用Mongoose必须先安装mongoose包: npm install mongoose
  加载Mongoose: const mongoose = require("mongoose")
  链接数据库: mongoose.connect("mongodb://127.0.0.1/test", { useMongoClient: true })
  断开链接: mongoose.disconnect()

const mongoose = require("mongoose") // WARNING: The `useMongoClient` option is no longer necessary in mongoose 5.x, please remove it. // mongoose.connect("mongodb://127.0.0.1/test", { useMongoClient: true })
mongoose.connect("mongodb://127.0.0.1/test") mongoose.connection.once('open', function() { console.log('mongodb链接成功。。。') }) mongoose.connection.once('close', function() { console.log('mongodb断开链接。。。') }) mongoose.disconnect()

 

十一、mongoose之Schema和Model    <--返回目录

const mongoose = require("mongoose") mongoose.connect("mongodb://127.0.0.1/test") mongoose.connection.once('open', function() { console.log('mongodb链接成功。。。') }) const Schema = mongoose.Schema // 建立Schema对象
const stuSchema = new Schema({ name: String, age: Number, gender: { type: String, default: 'male' }, address: String }) // 经过Schema建立Model // Model表明的是数据库中的集合,经过Model才能操做数据库
const stuModel = mongoose.model("stu", stuSchema) // 向数据库中插入一个文档
stuModel.create({ name: '张三', age: 10, gender: 'male', address: '中国广东省深圳市' }, function(err) { if (!err) console.log('插入成功...') throw err })

 

十二、mongoose的增长,查询方法    <--返回目录

const mongoose = require("mongoose") mongoose.connect("mongodb://127.0.0.1/test") mongoose.connection.once('open', function () { console.log('mongodb链接成功。。。') }) const Schema = mongoose.Schema // 建立Schema对象
const stuSchema = new Schema({ name: String, age: Number, gender: { type: String, default: 'male' }, address: String }) // 经过Schema建立Model // Model表明的是数据库中的集合,经过Model才能操做数据库
const stuModel = mongoose.model("stu", stuSchema) // 向数据库中插入一个文档
stuModel.create({ name: '张三1', age: 10, gender: 'male', address: '中国广东省深圳市' }, function (err, doc) { if (!err) { console.log('插入成功...') console.log(doc) console.log('主键返回,_id:', doc._id) } else { throw err } }) // find查询: 结果集是数组 // stuModel.find({name: '张三'}, function(err, docs) { // if(!err) { // console.log(docs[0].name) // console.log(docs) // } // }) // findOne查询:结果集是对象 // stuModel.findOne({name: '张三'}, function(err, doc) { // if(!err) { // console.log(doc.name) // console.log(doc) // } // })

// findByIde查询:结果集是对象 // stuModel.findById('5e3bd96d1ac8060958762b6a', function(err, doc) { // if(!err) { // console.log(doc.name) // console.log(doc) // } // })

// 第二参数:投影,即须要查询的字段 // stuModel.find({name: '张三'}, {name: 1, age:1, _id: 0}, function(err, docs) { // if(!err) { // console.log(docs[0].name) // console.log(docs) // } // })
stuModel.find({ name: '张三' }, 'name age -_id', function (err, docs) { if (!err) { console.log(docs[0].name) console.log(docs) } })

 

const mongoose = require("mongoose") mongoose.connect("mongodb://127.0.0.1/test") mongoose.connection.once('open', function () { console.log('mongodb链接成功。。。') }) const Schema = mongoose.Schema // 建立Schema对象
const stuSchema = new Schema({ name: String, age: Number, gender: { type: String, default: 'male' }, address: String }) // 经过Schema建立Model // Model表明的是数据库中的集合,经过Model才能操做数据库
const stuModel = mongoose.model("stu", stuSchema) stuModel.updateOne({ name: '张三' }, {$set: {age: 100}}, function (err, result) { if (!err) { console.log(result) // {ok: 1, nModified: 0, n: 1}
 } }) stuModel.deleteOne({ name: '张三' }, function (err, result) { if (!err) { console.log(result) // {ok: 1, n: 1, deleteCount: 1}
 } }) stuModel.count({ name: '张三1' }, function (err, result) { if (!err) { console.log(result) // 3
 } })

 

1三、mongoose的Document对象    <--返回目录

  Document与集合中的文档对应,Document是Model的实例,经过Model查询到的结果都是Document

 

  save()方法

const mongoose = require("mongoose") mongoose.connect("mongodb://127.0.0.1/test") mongoose.connection.once('open', function () { console.log('mongodb链接成功。。。') }) const Schema = mongoose.Schema // 建立Schema对象
const stuSchema = new Schema({ name: String, age: Number, gender: { type: String, default: 'male' }, address: String }) // 经过Schema建立Model // Model表明的是数据库中的集合,经过Model才能操做数据库
const stuModel = mongoose.model("stu", stuSchema) const stu = new stuModel({ name: 'zs', age: 30, gender: 'male', address: 'xxx' }) /* 打印结果 stu: { gender: 'male', _id: 5e3bf0b7e77e9411fcfe3963, name: 'zs', age: 30, address: 'xxx' } */ console.log('stu: ', stu) stu.save(function (err, result) { if (!err) { console.log('保存成功...') console.log('result: ', result) } }) /* result: { gender: 'male', _id: 5e3bf0b7e77e9411fcfe3963, name: 'zs', age: 30, address: 'xxx', __v: 0 } */

  update()方法和remove()方法

const mongoose = require("mongoose") mongoose.connect("mongodb://127.0.0.1/test") mongoose.connection.once('open', function () { console.log('mongodb链接成功。。。') }) const Schema = mongoose.Schema // 建立Schema对象
const stuSchema = new Schema({ name: String, age: Number, gender: { type: String, default: 'male' }, address: String }) // 经过Schema建立Model // Model表明的是数据库中的集合,经过Model才能操做数据库
const stuModel = mongoose.model("stu", stuSchema) const stu = new stuModel({ name: 'zs', age: 30, gender: 'male', address: 'xxx' }) stuModel.findById('5e3bf0b7e77e9411fcfe3963', function(err, doc) { if (!err) { console.log('查询成功, doc: ', doc) console.log('doc instanceof stuModel: ', doc instanceof stuModel) // true
 doc.update({name: 'zs111'}, function(err, result) { if (!err) { console.log('更新成功, result: ', result) } }) } }) stuModel.findById('5e3bf0b7e77e9411fcfe3963', function(err, doc) { if (!err) { console.log('查询成功, doc: ', doc) console.log('doc instanceof stuModel: ', doc instanceof stuModel) // true
 doc.remove(function(err, result) { if (!err) { console.log('删除成功, result: ', result) } }) } })

 

   另外一种修改方式:

stuModel.findById('5e3be238816b4f69242071da', function(err, doc) { if (!err) { console.log('查询成功, doc: ', doc) console.log('doc instanceof stuModel: ', doc instanceof stuModel) // true

        // doc.update({name: 'zs111'}, function(err, result) {
        // if (!err) {
        // console.log('更新成功, result: ', result)
        // }
        // })
 doc.name = 'test' doc.save() } })

---

相关文章
相关标签/搜索