@1002522146
        
        2017-06-22T08:17:26.000000Z
        字数 3062
        阅读 671
    node.js
Mongoose库简而言之就是对node环境中MongoDB数据库操作的封装,一种对象模型工具,可以将数据库中的数据转换为JavaScript对象供我们使用。
使用Mongoose必须先安装mongoose包npm install mongoose//连接Mongodb数据库const mongoose = require("mongoose");//连接数据库mongoose.connect("mongodb://127.0.0.1/my_database");mongoose.connection.once("open",()=>{console.log("数据库连接成功");})//断开连接//mongoose.disconnect();
模式为集合中的文档定义字段和字段类型。 
对于在模式中的每个字段,你都需要定一个特定的值类型。受支持的类型如下: 
String Number Boolean Array Buffer Date ObjectId或Oid Mixed 
需要为你计划使用的每个不同的文档类型都定义一个模式。
模式需要通过mongoose的Schema属性来创建,这个属性是一个构造函数。 
new Schema(definition,option) 
definition(描述模式) 
options 配置对象,定义与数据库中集合的交互
options常用选项
const mongoose = requier("mogoose");//创建userSchemaconst userSchema = new mongoose.Schema({username:{type:String,unique:true,index:1},password:String,})//定义并导出UserModelmodule.exports = mongoose.module("user",userSchema)
Model模型,是经过Schema构造来的,是Schema的编译版本。一个model的实例直接映射为数据库中的一个文档。基于这种关系, 以后的增删改查(CURD)都要通过这个Model实现。
model(name, [schema], [collection] , [skipInit]) 
name参数相当于模型的名字,以后可以同过name找到模型。 
schema是已创建的模式对象。 
collection是要连接的集合名。 
skipInit是否跳过初始化,默认是false。
//获取模型let UserModel = mongoose.model("user",userSchema);//通过Model对象向数据库中插入一条数据UserModel.create({name:"舒克",age:18},(err)=>{if(!err){console.log("插入成功~~");}});//Model对象的方法remove(conditions, callback)deleteOne(conditions, callback)deleteMany(conditions, callback)find(conditions, projection, options, callback)findById(id, projection, options, callback)findOne(conditions, projection, options, callback)count(conditions, callback)create(doc, callback)update(conditions, doc, options, callback)
//创建文档对象let user = new UserModel({username:"舒克",password:"123123"});//将文档对象存储到数据库中user.save((err)=>{if(!err){console.log("插入成功");}});//常用方法UserModel.findOne({username:"舒克"},(err, doc)=>{if(!err){//从数据库中查询到的数据都是Document对象console.log(doc instanceof UserModel);//获取Document对象的id属性值console.log(doc.id);//获取对象中的指定属性console.log(doc.username);console.log(doc.get("username"));//修改对象的属性,set()doc.set("password","321");//console.log(doc);//提交修改//doc.save();//修改对象doc.update({$set:{password:"23456"}},(err)=>{if(!err){console.log("修改成功");console.log(doc.password);}});//删除文档/*doc.remove((err) =>{if(!err){console.log("删除成功");}});*/}})
当我们调用Model的查询方法时,都需要传递一个回调函数作为参数,mongoose会通过回调函数将查询到的结果返回。 
如果我们调用查询方法时,没有传递回调函数,则查询不会发生,而是返回一个Query对象。 
我们可以通过这个Query对象来控制查询的条件,以及是否查询。
let UserModel = mongoose.model("user",userSchema);//查询数据库中的文档let userQuery = UserModel.find({});//exec() 可以调用query对象的exec()方法来执行查询userQuery.exec((err,docs)=>{if(!err){console.log(docs);}});//Query对象的方法equals(doc)idget(path,[type])set(path,value,[type])update(update,[options],[callback])save([callback])remove([callback])isNewisInit(path)toJSON()toObject()