mongoose 連接數據庫,增刪改查

根據我的編碼習慣,僅供參考

如中途看的有點蒙圈,能夠轉到官網查看html

引入模塊

var mongoose = require("mongoose");

鏈接數據庫

mongoose.connect("mongodb://localhost/mongoose_test");

連接狀態

mongoose.connection.once("open",function () {
    console.log("數據庫連接成功");
});
  • 爲了查看是否連接成功因此作一個回調

建立Schema(模式)對象

例:mongodb

var Schema = mongoose.Schema; //將mongoose.Schema 賦值給變量
//建立Schema對象
var stuSchema = new Schema({
    name:String,
    age:Number,
    gender:{
        type:String,
        default:"female"
    },
    address:String
});

官網:數據庫

clipboard.png

建立Model

經過Schema來建立Model

Model表明的是數據庫中的集合 ,經過Model 才能對數據庫進行操做,可在官網查看json

語法:api

mongoose.model(modelName, schema);
參數:modelName:要映射的集合名
特色:mongoose:會自動將集合名變成複數

例:數組

var StuModel = mongoose.model('student', stuSchema);

增長(向數據庫插入文檔)

語法:mongoose

Model.create(doc(s),[callback]);//用來建立一個文檔並添加到數據庫中

參數:ide

  • dec(s) 能夠是一個文檔對象也是能夠是一個文檔對象的數組
  • [callback] 可選的 回調函數

例:模塊化

StuModel.create({
    name:"白骨精",
    age:16,
    address:"白骨洞"
},function (err) {
    if(!err){
        console.log("插入成功");
    }
});

查詢

語法:函數

Model.find(conditions,[projection],[options],[callback]);//查詢全部符合條件的文檔  總會返回一個數組 
Model.findById(id,[projection],[options],[callback]);//根據文檔的id屬性查詢文檔
Model.findOne([conditions],[projection],[options],[callback]);//查詢符合條件的第一個文檔 老是返回一個具體的文檔對象

參數:

  • conditions 查詢條件
  • projection 投影(須要獲取到的字段)

    • 第一種方式 {name:1,_id:0}
    • 第二種方式 "name -_id"
  • options 查詢的選項(skip limit
  • callback 回調函數 查詢結果經過回調函數返回 回調函數必傳 若是不傳回調函數 壓根就不會查詢

例:

StuModel.find({name:"唐僧"},function (err,docs) {
   if(!err){
       console.log(docs[0].name);
   }
});
StuModel.find({},{name:1, _id:0},function (err,docs) {
    if(!err){
        console.log(docs);
    }
});
StuModel.findById("5bac79be5fb5454418668515",function (err,doc) {
    if(!err){
        //經過find()查詢的結果 返回的對象就是 Document 文檔對象
        //Document 對象是Model的實例
        console.log(doc instanceof StuModel)
    }
});

修改

語法:

Model.update(conditions,doc,[options],[callback]);//用來修改一個或者多個文檔
Model.updateMany(conditions,doc,[options],[callback]);//用來修改多個文檔
Model.updateOne(conditions,doc,[options],[callback]);//用來修改一個文檔
Model.replaceOne(conditions,doc,[options],[callback]);//替換一個

參數:

  • conditions 查詢條件
  • doc 修改後的對象
  • options 配置參數
  • callback 回調函數

刪除

語法:

Model.remove(conditions,[callback]);//刪除一個或者多個
Model.deleteOne(conditions,[callback]);//刪除一個
Model.deleteMany(conditions,[callback]);//刪除多個

例:

StuModel.remove({name:"白骨精"},function (err) {
    if(!err){
        console.log("刪除成功");
    }
})

統計文檔數量

語法:

Model.count(conditions,[callback])

例:

StuModel.count({},function (err,count) {
    if(!err){
        console.log(count);
    }
});

Document方法

Document 和 集合中的文檔一一對應 Document 是Model 的實例,經過Model查詢到結果都是Document

建立一個Document

var stu = new StuModel({
    name:"蘇小小",
    age:22,
    gender:"male",
    address:"上海"
});

Document 的方法

語法:

Model#save([options],[fn]);

例:

stu.save(function (err) {
    if(!err){
        console.log("保存成功")
    }
});

修改,刪除

語法:

修改對象: update(update,[options],[callback]);
刪除對象: remove([callback]);

例:

StuModel.findOne({},function (err,doc) {
    if(!err){
        /**
         * update(update,[options],[callback])
             * - 修改對象
         * remove([callback])
         *      - 刪除對象
         */
       // console.log(doc);
       //  doc.update({$set:{age:28}},function (err) {
       //      if(!err){
       //          console.log("修改爲功");
       //      }
       //  })
        /**
         * 或者
         */
        // doc.age = 18;
        // doc.save();
        
        
        
        // doc.remove(function (err) {
        //     if(!err){
        //         console.log("大師兄再見");
        //     }
        // })


        /**
         * get()
         *  - 獲取文檔中的指定屬性值
         * set(name,value)
         *  - 設置文檔的指定屬性值
         *  id
         *     - 獲取文檔的_id屬性值
         *  toJSON()
         *      - 轉換爲一個json對象
         *  toObject()
         *      - 將Document 對象轉換爲一個普通的js對象,注意全部的Document對象的方法或屬性都不能使用了
         */

        //console.log(doc.get("name"))
        /**
         * 或
         */
        // console.log(doc.name)


        //doc.set("name","豬無能");
        /**
         * 或
         */
      //  doc.name = "天蓬元帥";

        // console.log(doc._id);
        // var j = doc.toJSON();
        // console.log(typeof j);
        var o =doc.toObject()
        console.log(o)

    }
});

模塊化

新建一個js文件,用來鏈接數據庫
/**
 *定義一個模塊,用來鏈接mongodb數據庫
 */
var mongoose = require("mongoose");
mongoose.connect("mongodb://localhost/mongoose_test");
mongoose.connection.once("open",function () {
    console.log("數據庫連接成功");
});
-------------------------------------------------------------------
在新建一個js文件,用來建立student模型
/**
 *用來定義student模型
 */
var mongoose = require("mongoose");

var Schema = mongoose.Schema;

var stuSchema = new Schema({
    name:String,
    age:Number,
    gender:{
        type:String,
        default:"female"
    },
    address:String

});
/**
 *定義模型
 */
var StuModel = mongoose.model('student', stuSchema);

/**
 * 暴露出去
 */
module.exports = StuModel;
----------------------------------------------------------------
在須要調用的地方引入就能夠了
/**
 *定義一個模塊,用來鏈接mongodb數據庫
 */
var mongoose = require("mongoose");
mongoose.connect("mongodb://localhost/mongoose_test");
mongoose.connection.once("open",function () {
    console.log("數據庫連接成功");
});
相關文章
相關標籤/搜索