Apakah mongooes dalam nod

青灯夜游
Lepaskan: 2022-03-22 17:16:34
asal
2028 orang telah melayarinya

Dalam nod, mongooes ialah modul pihak ketiga dan perpustakaan model dokumen objek (ODM) Ia terus mengoptimumkan dan merangkum modul MongoDB asli Node dan boleh mengendalikan pangkalan data MongoDB dengan mengendalikan model objek.

Apakah mongooes dalam nod

Persekitaran pengendalian tutorial ini: sistem Windows 7, nodejs versi 12.19.0, komputer DELL G3.

Mongoose

Mongoose ialah modul Nodejs Modul ini boleh mengendalikan modul MongoDB untuk mengendalikan pangkalan data

Mongooose. ialah perpustakaan Model Dokumen Objek (ODM) yang mengoptimumkan dan merangkum modul MongoDB asli Node dan menyediakan lebih banyak fungsi.

Mongoose ialah alat model objek untuk MongoDB Ia adalah pemacu nodejs untuk MongoDB yang dibangunkan berdasarkan node-mongodb-native Ia juga kini menjadi pustaka pilihan untuk Node.js untuk mengendalikan MongoDB.

Manfaat Mongoose

  • Boleh mencipta struktur skema (kekangan) (Skema) untuk dokumen

  • Objek/dokumen dalam model boleh disahkan

  • Data boleh ditukar taip kepada model objek

  • Boleh digunakan menggunakan middleware Business logic hooking

  • lebih mudah daripada pemacu MongoDB asli Node

Nota: Untuk menggunakannya, anda mesti memasang node.js dan mongodb terlebih dahulu .

pemasangan mongoose

npm install mongoose
Salin selepas log masuk

Selepas pemasangan berjaya, seperti yang ditunjukkan di bawah:

Selepas pemasangan berjaya, anda boleh menggunakannya melalui require('mongoose')!

Rentetan sambungan

Cipta db.js

var mongoose = require('mongoose'),
    DB_URL = 'mongodb://localhost:27017/mongoosesample';/**
 * 连接 */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');  
});
Salin selepas log masuk

Panggil nod db.js untuk dilaksanakan dan anda akan lihat Output adalah seperti yang ditunjukkan di bawah

Seperti yang dapat dilihat daripada kod, beberapa acara dipantau, dan pelaksanaan mencetuskan acara yang disambungkan, yang bermaksud sambungan berjaya

sambungan Terdapat lebih daripada sekadar peristiwa di atas, kuncinya bergantung pada acara yang ingin anda pantau.

Acara lain boleh dilihat sendiri: http://mongoosejs.com/docs/api.html#connection_Connection

Ini adalah rentetan sambungan yang paling mudah, sudah tentu terdapat bentuk lain, seperti sebagai: Kata laluan sambungan, tetapan sambungan pangkalan data, sambungan mod kluster, dll. diterangkan di sini Sila semak dokumentasi API sendiri apabila menggunakannya

 http://mongoosejs.com/docs/api.html#index. -js

Skema

Skema ialah corak data yang digunakan dalam mongoose, yang boleh difahami sebagai takrifan struktur jadual setiap skema akan dipetakan ke dalam koleksi mongodb , ia tidak mempunyai keupayaan untuk mengendalikan pangkalan data

Kami mula-mula mengubah db.js dan mengeksport objek mongoose

var mongoose = require('mongoose'),
    DB_URL = 'mongodb://localhost:27017/mongoosesample';/**
 * 连接 */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');  
});    

module.exports = mongoose;
Salin selepas log masuk

Sekarang kami mentakrifkan Skema pengguna dan menamakannya user.js

 mongoose = require('./db.js'= UserSchema = 
    userpwd: {type: String},                        
    userage: {type: Number},                        
    logindate : { type: Date}
Salin selepas log masuk

Mentakrifkan Skema adalah semudah menyatakan nama medan dan jenis

Jenis Skema jenis terbina dalam adalah seperti berikut:

  • String

  • Nombor

  • Boolean |. 🎜>Penimbal

  • Tarikh

  • ObjectId |. >

  • Skema Anda juga boleh melakukan beberapa perkara biasa, yang akan dibincangkan kemudian!
  • Model

    Selepas mentakrifkan Skema, langkah seterusnya ialah menjana Model.
  • Model ialah model yang dijana oleh skema, yang boleh mengendalikan pangkalan data

    Kami menjana model Pengguna untuk skema pengguna yang ditakrifkan di atas dan mengeksportnya Kod yang diubah suai adalah seperti berikut

    Operasi pangkalan data biasa
  • Seterusnya, cipta fail test.js untuk menunjukkan beberapa operasi biasa. Sisipkan

 

Model#save([fn])

Hasilnya boleh dilihat dalam alat robmongo

Anda boleh lihat dari gambar bahawa sisipan itu berjaya!

  更新 

  Model.update(conditions, update, [options], [callback])

var User = require("./user.js");function update(){
    var wherestr = {'username' : 'Tracy McGrady'};    
    var updatestr = {'userpwd': 'zzzz'};
    
    User.update(wherestr, updatestr, function(err, res){  
       if (err) {
            console.log("Error:" + err);
        }        else {
            console.log("Res:" + res);
        }
    })
}

update();
Salin selepas log masuk

  根据用户名更新密码,执行后结果如图

  图中可以看出,密码更新成功!update方法基本可以满足所有更新!

  常用方法还有findByIdAndUpdate,这种比较有指定性,就是根据_id

  Model.findByIdAndUpdate(id, [update], [options], [callback])

var User = require("./user.js");function findByIdAndUpdate(){
    var id = '56f2558b2dd74855a345edb2';    
    var updatestr = {'userpwd': 'abcd'};
    
    User.findByIdAndUpdate(id, updatestr, function(err, res){     
       if (err) {
            console.log("Error:" + err);
        }        else {
            console.log("Res:" + res);
        }
    })
}

findByIdAndUpdate();
Salin selepas log masuk

  其它更新方法

  Model.findOneAndUpdate([conditions], [update], [options], [callback])      //找到一条记录并更新

  删除

  Model.remove(conditions, [callback])

var User = require("./user.js");function del(){
    var wherestr = {'username' : 'Tracy McGrady'};
    
    User.remove(wherestr, function(err, res){
        if (err) {
            console.log("Error:" + err);
        }        else {
            console.log("Res:" + res);
        }
    })
}

del();
Salin selepas log masuk

  结果就不贴了,res中会返回是否成功以及影响的行数:{"ok":1,"n":1}

  其它常用方法还有: 

  Model.findByIdAndRemove(id, [options], [callback])      

  Model.findOneAndRemove(conditions, [options], [callback])

  条件查询

  已先插入一些测试数据 。。

  Model.find(conditions, [fields], [options], [callback])

var User = require("./user.js");

function getByConditions(){
    var wherestr = {'username' : 'Tracy McGrady'};
    
    User.find(wherestr, function(err, res){
        if (err) {
            console.log("Error:" + err);
        }
        else {
            console.log("Res:" + res);
        }
    })
}

getByConditions();
Salin selepas log masuk

  结果我就不展示了

  第2个参数可以设置要查询输出的字段,比如改成

var User = require("./user.js");

function getByConditions(){
    var wherestr = {'username' : 'Tracy McGrady'};
    var opt = {"username": 1 ,"_id": 0};
    
    User.find(wherestr, opt, function(err, res){
        if (err) {
            console.log("Error:" + err);
        }
        else {
            console.log("Res:" + res);
        }
    })
}

getByConditions();
Salin selepas log masuk

  输出只会有username字段,设置方法如上,1表示查询输出该字段,0表示不输出

  比如我要查询年龄范围条件应该怎么写呢?

  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 ^_^!  

  数量查询

  Model.count(conditions, [callback])

var User = require("./user.js");

function getCountByConditions(){
    var wherestr = {};
    
    User.count(wherestr, function(err, res){
        if (err) {
            console.log("Error:" + err);
        }
        else {
            console.log("Res:" + res);
        }
    })
}
getCountByConditions();
Salin selepas log masuk

  res会输出数量,也可以传入条件做条件查询!

  根据_id查询

  Model.findById(id, [fields], [options], [callback])

var User = require("./user.js");

function getById(){
    var id = '56f261fb448779caa359cb73';
    
    User.findById(id, function(err, res){
        if (err) {
            console.log("Error:" + err);
        }
        else {
            console.log("Res:" + res);
        }
    })
}

getById();
Salin selepas log masuk

  这个还是比较常用,要据ID得到数据!  

  模糊查询

var User = require("./user.js");

function getByRegex(){
    var whereStr = {'username':{$regex:/m/i}};
    
    User.find(whereStr, function(err, res){
        if (err) {
            console.log("Error:" + err);
        }
        else {
            console.log("Res:" + res);
        }
    })
}

getByRegex();
Salin selepas log masuk

  上面示例中查询出所有用户名中有'm'的名字,且不区分大小写,模糊查询比较常用,正则形式匹配,正则方式就是javascript正则,用到的比较多!

  分页查询

var User = require("./user.js");

function getByPager(){
    
    var pageSize = 5;                   //一页多少条
    var currentPage = 1;                //当前第几页
    var sort = {'logindate':-1};        //排序(按登录时间倒序)
    var condition = {};                 //条件
    var skipnum = (currentPage - 1) * pageSize;   //跳过数
    
    User.find(condition).skip(skipnum).limit(pageSize).sort(sort).exec(function (err, res) {
        if (err) {
            console.log("Error:" + err);
        }
        else {
            console.log("Res:" + res);
        }
    })
}

getByPager();
Salin selepas log masuk

  分页是用得比较多的查询,分页原理用过其它数据库的都知道,分页用到的函数和mysql的比较类似

  上面我用到sort(),这个是排序规则,就不单讲了!

其它操作

  其它还有比较多常用的

  索引和默认值

  再看看我对user.js这个schema的修改

/**
 * 用户信息
 */
var mongoose = require('./db.js'),
    Schema = mongoose.Schema;

var UserSchema = new Schema({          
    username : { type: String , index: true},                    //用户账号
    userpwd: {type: String},                        //密码
    userage: {type: Number},                        //年龄
    logindate : { type: Date, default:Date.now}                       //最近登录时间
});

module.exports = mongoose.model('User',UserSchema);
Salin selepas log masuk

  index :建索引

  default:默认值

  LBS地址位置

lbs : { type: Array, index: '2d', sparse: true }   //地理位置
Salin selepas log masuk

  上面有介绍过很多基于LBS的条件查询,Schema中定义时如上

  LBS查询对于一些基于LBS应用会用得比较多。

  其它常用方法

  Model.distinct(field, [conditions], [callback])                  //去重

  Model.findOne(conditions, [fields], [options], [callback])             //查找一条记录

  Model.findOneAndRemove(conditions, [options], [callback])           //查找一条记录并删除

  Model.findOneAndUpdate([conditions], [update], [options], [callback])      //查找一条记录并更新

更多node相关知识,请访问:nodejs 教程

Atas ialah kandungan terperinci Apakah mongooes dalam nod. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan