node使⽤mysql中schema模型_在node中的mongodb及
mongoose常见⽤法
Mongoose是在node.js环境下对mongodb进⾏便捷操作的对象模型⼯具
安装
⼀开始需要安装node.js环境以及mongodb数据库,然后创建mongdb数据⽂件夹并且启动mongdb(windows安装启动mongodb)。
connect
connect ⽤于连接数据库
//url(s):数据库地址,可以是多个,以`,`隔开
//options:可选,配置参数
//callback:可选,回调
// 规则
// 连接mongodb⽰例
//连接指定⽤户连接⽰例
//连接多个数据库⽰例
//如果你的app中要连接多个数据库,只需要设置多个url以,隔开,同时设置mongos为true
mongos : true
})
创建schema & model
schema
schema可以理解为mongoose对表结构的定义(不仅仅可以定义⽂档的结构和属性,还可以定义⽂档的实例⽅法、静态模型⽅法、复合索引等),每个schema会映射到mongodb中的⼀个collection,schema不具备操作数据库的能⼒
const mongoose = require('mongoose');
const {Schema} = mongoose;
// ⽤户对象模型
const userSchema = new Schema({
name: {
type: String, //类型
default: w // 默认值
},
avatar: {
type: String,
required: true //必须有值
},
user: String,
passworld: String,
hash: String,
score: Number,
learn: Array,
message: Array,
star: Array,
sign: Array,
signdate: String,
isregister: Boolean,
});
schema字段类型
String
Number
Date
Buffer
Boolean
Mixed
ObjectId
Array
Model
Model是由Schema编译⽽成的假想(fancy)构造器,具有抽象属性和⾏为。Model的每⼀个实例(instance)就是⼀个document。document可以保存到数据库和对数据库进⾏操作。
//创建并导出model
const db= {
User: del('MUser', muserSchema),
};
现在我们就完成了mongodb的数据连接,数据对象模型的创建。
操作mongodb数据库
引⼊之前导出的模型mongodb数据const db = require('../models/db')
mongodb查询
1.find
find⽤来查询并输出该条件下的所有⽂档
db.Userl.find({conditions}, {options}, callback)
conditions Object类型 //查询条件
options Object 类型 //查询配置参数
callback Function //回调
查询操作⽰例
// 查询Article模型下所有数据
db.Article.find({}, function(err, docs){
if (err) {
console.log('出错'+ err);
return;
}
res.json(docs); // 以json格式输出
});
// 查询Article模型下state字段为'publish'的内容,并且不输出articleContent和user字段内容。注!(1为只输出该字段,0为不输出该字段)
db.Article.find({state: "publish"}, {articleContent: 0,user: 0}, function(err, docs){
if (err) {
console.log('出错'+ err);
return;
}
res.json(docs);
});
//查询阅读量⼤于500⼩于600的⽂章
db.Article.find(({views: {$gte: 500, $lte: 600}}), function(err, docs){
if (err) {
console.log('出错'+ err);
return;
}
res.json({data:docs});
})
// 复杂条件查询
//$ro 查询该模型下的title字段或者tag字段,$regex 为正则匹配实现模糊查询,$options为不区分⼤⼩写
db.Article.find({ $or: [{title: {$regex: searchval, $options:'i'} }, { tag: {$regex: searchval, $options:'i' }}] }}, function(err, docs){ if (err) {
console.log('出错'+ err);
return;
}
res.json({data:docs});
})
条件查询
$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个元素
2.findOne
与find类似,但只返回单个⽂档
db.Article.findOne({title: req.body.title}, function(err, docs){
if (err) {
console.log('出错'+ err);
}
res.json(docs);
})
3.findById
与findOne类似,但它接收⽂档的 _id 作为参数,返回单个⽂档。_id 可以是字符串或 ObjectId 对象。db.Article.findOne(id, function(err, docs){
if (err) {
console.log('出错'+ err);
}
res.json(docs);
})
返回符合条件的⽂档数。
unt(id, function(err, docs){
if (err) {
console.log('出错'+ err);
}
res.json(docs);
})
5.where
当查询⽐较复杂时,⽤ where:
db.Article.where('age').gte(25)
.where('tags').in(['movie', 'music', 'art'])
.select('name', 'age', 'tags')
.skip(20)
.limit(10)
exists的用法.asc('age')
.slaveOk()
.hint({ age: 1, name: 1 })
.
run(function(err, docs){
if (err) {

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。