摘要:开始之前,没什么比过一遍官方文档更有必要的了是啥有啥用是操作的一个对象模型库它封装了对文档操作的常用处理方法增删改查,让操作数据库变得快捷灵活。由创建的实体,可操作数据库。
开始之前,没什么比过一遍官方文档更有必要的了:http://mongoosejs.com/
mongoose 是啥?有啥用?
mongoose 是操作 MongoDB 的一个对象模型库;它封装了MongoDB对文档操作的常用处理方法(增删改查),让 NodeJS 操作 Mongodb 数据库变得快捷灵活。
本文所用到的完整代码:源码
安装 mongoose新建目录 s4_mongoose 和 test.js 文件:
mkdir s4_mongoose cd s4_mongoose touch test.js
初始化目录生成 package.json 并安装 mongoose:
npm init cnpm install mongoose --save连接数据库
编辑 test.js :
var mongoose = require("mongoose"); var db = mongoose.connect("mongodb://127.0.0.1:27017/test"); db.connection.on("error", function(error){ console.log("数据库test连接失败:" + error); }); db.connection.on("open", function(){ console.log("数据库test连接成功"); });
接着先打开一个 iTerm2 终端,开启 mongodb 服务:
mongod
再打开另一个 iTerm2 终端,运行 test.js:
node test.js //成功后便会输出:数据库test连接成功Schema/Model/Entity
没有比文档更详细的了:http://mongoosejs.com/docs/guide.html
Schema:数据库集合的结构对象。
Model :由Schema构造而成,可操作数据库。
Entity:由Model创建的实体,可操作数据库。
看完文档后,再看看下面一段代码配合理解一下:
var mongoose = require("mongoose"); var db = mongoose.connect("mongodb://127.0.0.1:27017/test"); // var testModel = db.model("test1", testSchema); // 集合名称;集合的结构对象 var TestSchema = new mongoose.Schema({ name : { type:String }, age : { type:Number, default:0 }, email: { type:String }, time : { type:Date, default:Date.now } }); var TestModel = db.model("test1", TestSchema ); var TestEntity = new TestModel({ 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 、并往里面插入保存一组数据:
var testSchema = new mongoose.Schema({ name: {type: String}, age: {type: Number, default: 0}, email: {type: String}, time: {type: Date, default: Date.now} }); var testModel = db.model("test1", testSchema); // 集合名称;集合的结构对象 // Document文档(关联数组式的对象) < Collection集合 < 数据库 // 插入保存一段数据 testModel.create([ {name: "test1", age: 8}, {name: "test2", age: 18}, {name: "test3", age: 28}, {name: "test4", age: 38}, {name: "test5", age: 48}, {name: "test6", age: 58, email:"tttt@qq.com"}, {name: "test7", age: 68, email:"ssss@qq.com"}, {name: "test8", age: 18}, {name: "test9", age: 18, email:"rrrr@qq.com"}, {name: "test10",age: 18} ], function (error, docs) { if(error) { console.log(error); } else { console.log("save ok"); console.log(docs); } });find 数据查询
mongoose 提供了find、findOne、和findById方法用于文档查询。
基本语法:
model.find(Conditions,fields,options,callback(err, doc));
Conditions: 查询条件
fields: 返回的字段
options: 游标(sort,limit)
callback: 回调函数,参数doc为查询出来的结果
条件查询的基础:
$lt (小于<)
$lte (小于等于<=)
$gt (大于>)
$gte (大于等于>=)
$ne (不等于,不包含!=)
$in (包含)
$or (查询多个键值的任意给定值)
$exists (判断某些属性是否存在)
$all (全部)
具体的一些实例,代码里已有详细注释:
// find(Conditions,fields,callback); // 省略或为空、返回所有记录;只包含name,age字段,去掉默认的_id字段;执行回调函数 testModel.find({}, {name:1, age:1, _id:0}, function(err, docs){ if (err) { console.log("查询出错:" + err); } else { console.log("{}查询结果为:"); console.log(docs); } }); // 查询age大于等于28,小于等于48 testModel.find({age: {$gte: 28, $lte: 48}}, {name:1, age:1, _id:0}, function(err, docs){ if (err) { console.log("查询出错:" + err); } else { console.log("$gte,$lte查询结果为:"); console.log(docs); } }); // 查询age为58、68的2条数据 testModel.find({age: {$in: [58, 68]}}, {name:1, age:1, _id:0}, function(err, docs){ if (err) { console.log("查询出错:" + err); } else { console.log("$in查询结果为:"); console.log(docs); } }); // 查询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 数据更新
基本使用:model.update(查询条件,更新对象,callback);
var conditions = {name: "test1"}; var update = {$set: {age: 11 }}; testModel.update(conditions, update, function(error){ if(error) { console.log(error); } else { console.log("Update success!"); testModel.find({name: "test1"}, {name:1, age:1, _id:0}, function(err, docs){ if (err) { console.log("查询出错:" + err); } else { console.log("更新test1后的查询结果为:"); console.log(docs); // 更新test_update后的查询结果为空数组:[ ]; // 更新test1后的查询结果为: [ { name: "test1", age: 11 } ] // 只能更新本来已存在的数据 } }); } });remove 数据删除
基本使用:model.remove(查询条件,callback);
var conditions = {name: "test2"}; testModel.remove(conditions, function(error){ if(error) { console.log(error); } else { console.log("Delete success!"); 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后的查询结果为空数组:[ ]; } }); } });robomongo mongodb可视化工具
安装 mongodb 可视化工具 robomongo
在 iTerm2 开启本地mongodb后(执行mongod),打开 robomongo,新建 connection 即可连上本地的 mongodb 数据库。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/19044.html
摘要:安装然后,我们需要将引入我们的项目中,使用连接我们在本地运行实例名为数据库。在连接到本地的数据库,我们需要知道连接的是否成功在中,全部来源于那么,到目前为止,我们创建了一个只有一个属性值为类型的的。 起步 首先先确定MongoDB和Node.js已经安装。安装Mongoose: npm install mongoose 然后,我们需要将mongoose引入我们的项目中,使用mongoo...
摘要:文档是的核心概念,是键值对的一个有序集,在里文档被表示成对象。创建集合数据库中的集合名称当我们对其添加数据时如果已经存在,则会保存到其目录下,如果未存在,则会创建集合,然后在保存数据。使用创建,如下示例连接成功许巍男保存成功保存失败参考 mongoose简介 mongoose网站:https://mongoosejs.com/ 为什么要用Mongoose Mongoose就是一个让我们...
摘要:如图连接成功后,显示你的数据库,在这个节目可以对数据库进行操作。如图安装与加载首先假定你已经安装了,命令行工具输入在使用的文件中即可。创建读取更新删除单值读取上文是在中基于对进行增删查改操作的简单介绍,以后会有进阶的文章。 关键词:mongodb安装 mongoose使用 robomongo mongoose的CRUD操作 mongoose的查询,增加,修改,删除 工具介绍 Mon...
摘要:如图连接成功后,显示你的数据库,在这个节目可以对数据库进行操作。如图安装与加载首先假定你已经安装了,命令行工具输入在使用的文件中即可。创建读取更新删除单值读取上文是在中基于对进行增删查改操作的简单介绍,以后会有进阶的文章。 关键词:mongodb安装 mongoose使用 robomongo mongoose的CRUD操作 mongoose的查询,增加,修改,删除 工具介绍 Mon...
摘要:前言要做一个全沾的工程师,对于后端和数据库来说,即使不认识也要见个面的。基本了解的概念就好,主要是安装上数据库,并进行简单的增删操作。 前言:要做一个全沾的工程师,对于后端和数据库来说,即使不认识也要见个面的。本文给的例子很简单,也贴出来源码,只要一步步下来,就可以跑起来啦~~~ 思考一个需求:做一个登录页面,自己搭建服务和数据库,将用户输入的登录信息保存到数据库如何完成呢:首先选择...
阅读 2196·2021-11-25 09:43
阅读 1164·2021-11-23 09:51
阅读 3498·2021-11-23 09:51
阅读 3627·2021-11-22 09:34
阅读 1543·2021-10-09 09:43
阅读 2119·2019-08-30 15:53
阅读 3160·2019-08-30 14:07
阅读 568·2019-08-28 18:14