《數據庫--mongo使用教程》

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();
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 初學Node.js接觸到MongoDB數據庫,閱讀資料中推薦的都是Mongoose模塊,可以更加方便的對數據庫進行...
    LnEoi閱讀 31,483評論 9 49
  • 參考深入淺出mongoose 連接mongoose mongoose連接數據庫有兩種方式第一種: 第二種: mon...
    bacbcc94613b閱讀 12,367評論 1 27
  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,991評論 19 139
  • 你是如何看待職場的?只不過是一個工作而已?打發時間的地方?僅僅為了賺錢?就是一個生存工具? 我不這么認為。職場是我...
    敏姐的思維空間閱讀 249評論 0 1
  • 美女姐,外貌很美,五官端正,會來事,會化妝 熟悉各種品牌護膚品好壞,對于口紅有獨到的見解,會向你推薦口紅,護膚等 ...
    別的其他閱讀 226評論 0 0