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.
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
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'); });
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 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;
Sekarang kami mentakrifkan Skema pengguna dan menamakannya user.js
mongoose = require('./db.js'= UserSchema = userpwd: {type: String}, userage: {type: Number}, logindate : { type: Date}
Mentakrifkan Skema adalah semudah menyatakan nama medan dan jenis
Jenis Skema jenis terbina dalam adalah seperti berikut:
String
Nombor
Boolean |. 🎜>Penimbal
Tarikh
ObjectId |. >
Model
Selepas mentakrifkan Skema, langkah seterusnya ialah menjana Model.Kami menjana model Pengguna untuk skema pengguna yang ditakrifkan di atas dan mengeksportnya Kod yang diubah suai adalah seperti berikut
Operasi pangkalan data biasaSeterusnya, cipta fail test.js untuk menunjukkan beberapa operasi biasa. Sisipkan
Model#save([fn])
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();
根据用户名更新密码,执行后结果如图
图中可以看出,密码更新成功!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();
其它更新方法
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();
结果就不贴了,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();
结果我就不展示了
第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();
输出只会有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();
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();
这个还是比较常用,要据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();
上面示例中查询出所有用户名中有'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();
分页是用得比较多的查询,分页原理用过其它数据库的都知道,分页用到的函数和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);
index :建索引
default:默认值
LBS地址位置
lbs : { type: Array, index: '2d', sparse: true } //地理位置
上面有介绍过很多基于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!