摘要:開始之前,沒什么比過一遍官方文檔更有必要的了是啥有啥用是操作的一個對象模型庫它封裝了對文檔操作的常用處理方法增刪改查,讓操作數據庫變得快捷靈活。由創建的實體,可操作數據庫。
開始之前,沒什么比過一遍官方文檔更有必要的了: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 數據庫。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/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...
摘要:前言要做一個全沾的工程師,對于后端和數據庫來說,即使不認識也要見個面的。基本了解的概念就好,主要是安裝上數據庫,并進行簡單的增刪操作。 前言:要做一個全沾的工程師,對于后端和數據庫來說,即使不認識也要見個面的。本文給的例子很簡單,也貼出來源碼,只要一步步下來,就可以跑起來啦~~~ 思考一個需求:做一個登錄頁面,自己搭建服務和數據庫,將用戶輸入的登錄信息保存到數據庫如何完成呢:首先選擇...
閱讀 2197·2021-11-25 09:43
閱讀 1165·2021-11-23 09:51
閱讀 3499·2021-11-23 09:51
閱讀 3629·2021-11-22 09:34
閱讀 1543·2021-10-09 09:43
閱讀 2119·2019-08-30 15:53
閱讀 3161·2019-08-30 14:07
閱讀 568·2019-08-28 18:14