node基于mongoose操作mongodb

mongodb简介

mongodb不同于orcle、mysql等关系型数据库,是属于非关系型db,是目前使用最多的nosql。

NoSQL:非关系型的数据库(Not Only SQL)用于超大规模数据的存储。
优点: 高可扩展性、分布式计算、低成本、架构的灵活性,半结构化数据、没有复杂的关系
缺点: 没有标准化、有限的查询功能(到目前为止)、最终一致是不直观的程序
在这里插入图片描述

mongodb结构

学习mongodb首先要了解mongodb的组成Schema、model、instance

Schema: 用来定义数据库的结构,相当于一个数据库的模板. Model可以通过mongoose.model 集成其基本属性内容. 当然也可以选择不继承。schema不具备操作数据库的能力
Model: 由schema编译出的构造器,用来定义集合模型,通过集成Schema定义的基本方法和属性得到相关的内容,Model的实例即是文档。model具备数据库的增删改查
Instance: 由model构造器创建的实体,通过 new Model()实例得到,即文档document。

Schema

Schema 之所以能够定义documents, 是因为他可以限制你输入的字段及其类型. mongoose支持的基本类型有
String Number Date Buffer
Boolean Mixed ObjectId Array

创建Schema对象时,声明字段类型有两种方法,一种是首字母大写的字段类型,另一种是引号包含的小写字段类型

如果需要在Schema定义后添加其他字段,可以使用add()方法

var MySchema = new Schema;
MySchema.add({ name: 'string', color: 'string', price: 'number' });

Model

Model是由Schema编译而成的假想(fancy)构造器,具有抽象属性和行为。Model的每一个实例(instance)就是一个document,document可以保存到数据库和对数据库进行操作。简单说就是model是由schema生成的模型,可以对数据库的操作

mongoose.model('mongoose_model', Schema, 'ur_mongodb')
// (参数第一位模型(model)名字,参数二生成model所需要的schema,参数三为集合名

使用model()方法,将Schema编译为Model。model()方法的第一个参数是模型名称
一定要将model()方法的第一个参数和其返回值设置为相同的值,否则会出现不可预知的结果
注:
Mongoose会将集合名称设置为模型名称的小写版。如果名称的最后一个字符是字母,则会变成复数;如果名称的最后一个字符是数字,则不变;如果模型名称为"MyModel",则集合名称为"mymodels";如果模型名称为"Model1",则集合名称为"model1"
var schema = new mongoose.Schema({ num:Number, name: String, size: String});
var MyModel = mongoose.model(‘MyModel’, schema);

Instance

instance 即model构造器创建的实体,通过 new Model()初始化得到,即文档document。

利用mongoose对mongodb增删改查

为了避免混淆只采用connec连接具体连接方式有connection、connect等,有兴趣的可以区了解一下区别

mongoose.connect(uri(s), [options], [options.useMongoClient], [callback])

连接mongodb时回调函数要绑定一个错误事件绑定

var mongoose = require('mongoose');
var config = require('../config').mongodb;
var mongourl = `mongodb://${config.mongo_config.HOST}:${config.mongo_config.PORT}/${config.mongo_config.DATABASE}`;
mongoose.connect(mongourl, config.mongo_option, (err) => {
    if (err) {
        console.log(err)
        process.exit(1)
    }
})
mongoose增删改查

不bb 直接上例子

增
Model.create(doc(s),(err,doc(s))=>{})   (单条)
new userModel({id:1,name:'aa',age:23}).save(err,doc(s))=>{})  (单条)
User.collection.insert(quesObj, function(err, doc) {}) (存多条)
删
在model上删文档
Model.remove(conditions,(err,doc)=>{})
在文档上删文档
Model.find({id:{$lte:5}},(err,docs)=>{
    docs.remove()	
})
改
Model.update(conditions,update,(err,raw)=>{})
查
Model.find(conditions, [fields], [options], [(err,docs)=>{}])
// 参数:查询条件,控制返回的字段(字段筛选),配置查询参数,回调函数

查询:
conditions查询条件参考mongo语法,比如$lte:32之类的
fields即是控制返回数据的字段,就是说你想要哪些key,想要返回name就写’name’,此时默认会返回_id值,写成{name:1,_id:0}即可
options配置查询参数,比如做分页的时候{limit:20}表示返回20条数据(不足返回全部)
callback中err表示查询错误,docs表示返回的结果
.findOne()表示返回数据中的第一条,.findById()表示根据obj.id查找

发布了14 篇原创文章 · 获赞 4 · 访问量 269

猜你喜欢

转载自blog.csdn.net/nodeDocker/article/details/100032854