github地址
目錄
<a id="install"></a>安裝
$ brew install mongodb
<a id="start"></a>啟動本地數據庫
mongod --dbpath="pwd"
<a id="how_use"></a>操作步驟
<a id="mongoose"></a>mongoose(node環境下操作)
- <a id="connect"></a>連接數據庫
--db.js
var mongoose = require('mongoose'),
DB_URL = 'mongodb://localhost:27017/mongoosesample';//mongo地址
/**
* 連接
*/
mongoose.connect(DB_URL);
/**
* 連接成功
*/
mongoose.connection.on('connected', function () {
console.log('Mongoose connection open to ' + DB_URL);
});
/**
* 連接異常
*/
mongoose.connection.on('error',function (err) {
console.log('Mongoose connection error: ' + err);
});
/**
* 連接斷開
*/
mongoose.connection.on('disconnected', function () {
console.log('Mongoose connection disconnected');
});
- <a id="schema"></a>schema
- 是mongoose里會用到的一種數據模式,可以理解為表結構的定義;每個schema會映射到mongodb中的一個collection,它不具備操作數據庫的能力,我們先改造一下db.js,導出mongoose對象
--db.js
/**
* ??
*/
module.exports = mongoose;
--user.js //下面我們定義一個user的Schema,命名為user.js
/**
* 用戶信息
*/
var mongoose = require('./db.js'),
Schema = mongoose.Schema;
var UserSchema = new Schema({
username : { type: String }, //用戶賬號
userpwd: {type: String}, //密碼
userage: {type: Number}, //年齡
logindate : { type: Date} //最近登錄時間
});
/*
定義一個Schema就這么簡單,指定字段名和類型
Schema Types內置類型如下:
String 字符串
Number 數字
Boolean | Bool 布爾值
Array 數組
Buffer buffer字符串
Date 日期
ObjectId | Oid 唯一憑證
Mixed 混合
*/
- <a id="model"></a>model
- model是由schema生成的模型,可以對數據庫的操作 我們對上面的定義的user的schema生成一個User的model并導出,修改后代碼如下
--user.js
/**
* ??
*/
module.exports = mongoose.model('User',UserSchema);
<a id="options"></a>常用數據庫操作--增刪查改
<a id="add"></a>save
- Model.save([fn])
var UserModel = require("./user.js");
/**
* 插入
*/
function insert() {
var userModel = new UserModel({
username : 'Tracy McGrady', //用戶賬號
userpwd: 'abcd', //密碼
userage: 37, //年齡
logindate : new Date() //最近登錄時間
});
userModel.save(function (err, res) {
if (err) {
console.log("Error:" + err);
}
else {
console.log("Res:" + res);
}
});
}
insert();
<a id="update"></a>update
- Model.update(conditions, update, [options], [callback])//查詢條件,替換數據
var UserModel = require("./user.js");
function update(){
var wherestr = {'username' : 'Tracy McGrady'};
var updatestr = {'userpwd': 'zzzz'};
UserModel.update(wherestr, updatestr, function(err, res){
if (err) {
console.log("Error:" + err);
}
else {
console.log("Res:" + res);
}
})
}
update();
<a id="find&update"></a>findByIdAndUpdate
- 常用方法還有findByIdAndUpdate,這種比較有指定性,就是根據_id
- Model.findByIdAndUpdate(id, [update], [options], [callback])//id 更新數據
- 其它更新方法
- Model.findOneAndUpdate([conditions], [update], [options], [callback]) //找到一條記錄并更新
var UserModel = require("./user.js");
function findByIdAndUpdate(){
var id = '56f2558b2dd74855a345edb2';
var updatestr = {'userpwd': 'abcd'};
UserModel.findByIdAndUpdate(id, updatestr, function(err, res){
if (err) {
console.log("Error:" + err);
}
else {
console.log("Res:" + res);
}
})
}
findByIdAndUpdate();
<a id="delete"></a>刪除
- Model.remove(conditions, [callback])
- 其它常用方法還有:
- Model.findByIdAndRemove(id, [options], [callback])
- Model.findOneAndRemove(conditions, [options], [callback])
var UserModel = require("./user.js");
function del(){
var wherestr = {'username' : 'Tracy McGrady'};
UserModel.remove(wherestr, function(err, res){
if (err) {
console.log("Error:" + err);
}
else {
console.log("Res:" + res);
}
})
}
del();
<a id="find"></a>條件查詢 已先插入一些測試數據 。。
- Model.find(conditions, [fields], [options], [callback])
var UserModel = require("./user.js");
function getByConditions(){
var wherestr = {'username' : 'Tracy McGrady'};//搜索條件
var opt = {"username": 1 ,"_id": 0};//輸出條件 1是顯示,0是不顯示
UserModel.find(wherestr, opt ,function(err, res){
if (err) {
console.log("Error:" + err);
}
else {
console.log("Res:" + res);
}
})
}
getByConditions();
比如我要查詢年齡范圍條件應該怎么寫呢?
User.find({userage: {$gte: 21, $lte: 65}}, callback); //這表示查詢年齡大于等21而且小于等于65歲
其實類似的還有:
$or 或關系
$nor 或關系取反
$gt 大于
$gte 大于等于
$lt 小于
$lte 小于等于
$ne 不等于
$in 在多個值范圍內
$nin 不在多個值范圍內
$all 匹配數組中多個值
$regex 正則,用于模糊查詢
$size 匹配數組大小
$maxDistance 范圍查詢,距離(基于LBS)
$mod 取模運算
$near 鄰域查詢,查詢附近的位置(基于LBS)
$exists 字段是否存在
$elemMatch 匹配內數組內的元素
$within 范圍查詢(基于LBS)
$box 范圍查詢,矩形范圍(基于LBS)
$center 范圍醒詢,圓形范圍(基于LBS)
$centerSphere 范圍查詢,球形范圍(基于LBS)
$slice 查詢字段集合中的元素(比如從第幾個之后,第N到第M個元素)
可能還有一些,沒什么印象,大家自行看看api ^_^!
<a id="count"></a>數量查詢
- Model.count(conditions, [callback])
var UserModel = require("./user.js");
function getCountByConditions(){
var wherestr = {};
UserModel.count(wherestr, function(err, res){
if (err) {
console.log("Error:" + err);
}
else {
console.log("Res:" + res);
}
})
}
getCountByConditions();
<a id="findById"></a>根據_id查詢
- Model.findById(id, [fields], [options], [callback])
var UserModel = require("./user.js");
function getById(){
var id = '56f261fb448779caa359cb73';
UserModel.findById(id, function(err, res){
if (err) {
console.log("Error:" + err);
}
else {
console.log("Res:" + res);
}
})
}
getById();
<a id="findInRegex"></a> 模糊查詢(正則匹配查詢)
- 示例中查詢出所有用戶名中有'm'的名字,且不區分大小寫,模糊查詢比較常用,正則形式匹配,正則方式就是javascript正則,用到的比較多!
var UserModel = require("./user.js");
function getByRegex(){
var whereStr = {'username':{$regex:/m/i}};//根據正則匹配查詢
UserModel.find(whereStr, function(err, res){
if (err) {
console.log("Error:" + err);
}
else {
console.log("Res:" + res);
}
})
}
getByRegex();