当前位置: 首页 > 后端技术 > Node.js

在开始基本使用mongoose

时间:2023-04-03 12:50:32 Node.js

之前,没有什么比阅读官方文档更必要的了:http://mongoosejs.com/whatismongoose?什么用途?mongoose是一个操作MongoDB的对象模型库;封装了MongoDB对文档操作(增删改查)常用的处理方法,使得NodeJS操作Mongodb数据库变得快速灵活。本文使用的完整代码:sourcecodeinstallmongoosecreatenewdirectorys4_mongooseandtest.jsfile:mkdirs4_mongoosecds4_mongoosetouchtest.jsinitializedirectorygeneratepackage.jsonandinstallmongoose:npminitcnpminstallmongoose--saveconnecttodatabase编辑测试.js:varmongoose=require('mongoose');vardb=mongoose.connect('mongodb://127.0.0.1:27017/test');db.connection.on('error',function(error){console.log('数据库测试连接失败:'+error);});db.connection.on('open',function(){console.log('数据库测试连接成功');});然后先打开一个iTerm2终端,启动mongodb服务:mongod然后再打开一个iTerm2终端,运行test.js:nodetest.js//成功后会输出:databasetestconnectionissuccessfulSchema/Model/Entityisnot比文档更详细:http://mongoosejs.com/docs/guide.htmlSchema:数据库集合的模式对象。Model:由Schema构建而成,可以对数据库进行操作。Entity:Model创建的实体,可以操作数据库。看完文档再看下面这段代码就明白了:varmongoose=require("mongoose");vardb=mongoose.connect("mongodb://127.0.0.1:27017/test");//vartestModel=db.model('test1',testSchema);//集合名称;集合结构对象varTestSchema=newmongoose.Schema({name:{type:String},age:{type:Number,default:0},email:{type:String},time:{type:Date,default:Date.now}});varTestModel=db.model("test1",TestSchema);varTestEntity=newTestModel({name:"helloworld",age:28,email:"helloworld@qq.com"});TestEntity.save(function(error,doc){if(error){console.log("error:"+error);}else{console.log(doc);}});model数据插入的前提是前面的数据库连接成功,我们在数据库test下新建一个集合test1,往里面插入一组数据:vartestSchema=newmongoose.Schema({name:{type:String},年龄:{type:Number,default:0},email:{type:String},time:{type:Date,default:Date.now}});var测试模型=db.模型('test1',testSchema);//集合名称;collection结构对象//Document文档(关联数组对象))$gte(大于等于>=)$ne(不等于,不包含!=)$in(included)$or(查询多个键值的任意给定值)$exists(判断某些属性是否存在)$all(all)一些具体的例子,代码中有详细注释://find(Conditions,fields,callback);//省略或为空,返回所有记录;只包含姓名、年龄字段,去掉默认的_id字段;执行回调函数testModel.find({},{name:1,age:1,_id:0},function(err,docs){if(err){console.log('queryerror:'+err);}else{console.log('{}查询结果为:');console.log(docs);}});//查询年龄大于等于28,小于等于48testModel.find({age:{$gte:28,$lte:48}},{name:1,age:1,_id:0},function(err,docs){if(err){console.log('查询错误:'+err);}else{console.log('$gte,$ltequeryresultis:');console.log(docs);}});//查询2条age为58和68的数据testModel.find({age:{$in:[58,68]}},{name:1,age:1,_id:0},function(err,docs){if(err){console.log('查询错误:'+err);}else{console.log('$in查询结果为:');控制台日志(文档);}});//查询name为test3或age为18的所有数据testModel.find({$or:[{name:'test3'},{age:18}]},{name:1,age:1,_id:0},function(err,docs){if(err){console.log('查询错误:'+err);}else{console.log('$or查询结果为:');console.log(docs);}});//step3:游标查询//查询name为test3或age为18的所有数据;但将查询限制为仅2条数据testModel.find({$or:[{name:'test3'},{age:18}]},{name:1,age:1,_id:0},{limit:2},function(err,docs){if(err){console.log('查询错误:'+err);}else{console.log('limit查询结果为:');console.log(docs);}});update数据更新的基本使用:模型。更新(查询条件,更新对象,回调);varconditions={name:'test1'};varupdate={$set:{age:11}};testModel.update(conditions,update,function(error){if(error){console.log(error);}else{console.log('更新成功!');testModel.find({name:'test1'},{name:1,age:1,_id:0},function(err,docs){if(err){console.log('查询错误:'+err);}else{console.log('更新test1后的查询结果结果是:');控制台日志(文档);//更新test_update后的查询结果为空数组:[];//更新test1后的查询结果为:[{name:'test1',age:11}]//只能更新已经存在的数据}});}});remove数据删除的基本使用:model.remove(querycondition,callback);varconditions={name:'test2'};testModel.remove(conditions,function(error){if(error){console.log(error);}else{console.log('删除成功!');testModel.find({name:'test2'},{name:1,age:1,_id:0},function(err,docs){if(err){console.log('查询错误:'+err);}else{console.log('删除test2后的查询结果为:');console.log(docs);//删除test2后的查询结果是一个空数组:[];}});}});robomongomongodb可视化工具iTerm2打开本地mongodb后安装mongodb可视化工具robomongo(执行mongod),打开robomongo,新建连接连接本地mongodb数据库