mongoose示例
基本操作
const mongoose = require('mongoose')
mongoose.connect('mongodb://localhost:27017/mktest', {
useUnifiedTopology: true,
useNewUrlParser: true
})
const db = mongoose.connection
db.on('error', console.error.bind(console, 'connection error'))
db.once('open', () => {
console.log('we are connected!')
})
const types = mongoose.Schema.Types
const UserSchema = mongoose.Schema({
name: types.String,
age: types.Number,
sex: types.String,
subject: types.Mixed
})
const User = mongoose.model('User', UserSchema, 'user')
User.find({age: {$gt: 1}}).then(data => {
console.log(data)
}).catch(err => {
console.log(err)
})
模块化
const UserModel = require('./mongoose/userinfo')
const OrderModel = require('./mongoose/order')
const user = new UserModel({
name: '老许',
age: 40
})
OrderModel.find().then(data => {
console.log(data)
}).catch(err => {
console.log(err)
})
const mongoose = require('mongoose')
exports.types = mongoose.Schema.Types
mongoose.connect('mongodb://localhost:27017/mktest', {
useUnifiedTopology: true,
useNewUrlParser: true,
useCreateIndex: true
}).then(data => {
console.log(`数据库连接成功${data}`)
}).catch(err => {
console.log(`数据库连接失败${err}`)
})
exports.mongoose = mongoose
const {mongoose, types} = require('./db')
const UserInfoSchema = mongoose.Schema({
name: types.String,
age: types.Number,
sex: {
type: types.String,
default: '男'
}
})
module.exports = mongoose.model('UserInfo', UserInfoSchema, 'userinfo')
const {mongoose, types} = require('./db')
const OrderSchema = mongoose.Schema({
order_id: types.String,
uid: types.Number,
trade_no: types.String,
all_price: types.Number,
all_num: types.Number
})
module.exports = mongoose.model('Order', OrderSchema, 'order')
console.time('user')
const UserModel = require('./mongoose/userinfo')
console.timeEnd('user')
console.time('order')
const Order = require('./mongoose/order')
console.timeEnd('order')
console.time('user2')
const UserModel2 = require('./mongoose/userinfo')
console.timeEnd('user2')
const {mongoose, types} = require('./db')
const PersonSchema = mongoose.Schema({
name: {
type: types.String,
trim: true,
required: true
},
sn: {
type: types.String,
index: true,
set(val) {
return `mk:${val}`
},
maxlength: 10,
minlength: 4,
},
age: {
type: types.Number,
min: 0,
max: 240,
},
status: {
type: types.String,
default: 'success',
enum: ['success', 'error']
}
})
module.exports = mongoose.model('Person', PersonSchema, 'person')
关联查询
const OrderModel = require('./mongoose/order')
OrderModel.aggregate([
{
$lookup: {
from: 'order_item',
localField: 'order_id',
foreignField: 'order_id',
as: 'items'
}
},
{
$match: {all_price: {$gte: 90}}
}
]).then(data => {
console.log(data)
}).catch(err => {
console.log(err)
})
三表关联
const ArticleModel = require('./mongoose/article')
ArticleModel.aggregate([
{
$lookup: {
from: "articlecate",
localField: "cid",
foreignField: "_id",
as: "cate"
}
}, {
$lookup: {
from: "user",
localField: "author_id",
foreignField: "_id",
as: "user"
}
}
]).then(data => {
console.log(JSON.stringify(data))
}).catch(err => {
console.log(err)
})
const ArticleCateModel = require('./mongoose/articlecate')
const UserModel = require('./mongoose/user')
const ArticleModel = require('./mongoose/article')
const article = new ArticleModel()
article.title = '这是一个国内新闻11111111'
article.cid = '5df86b3c1074f23f10a6a800'
article.author_id = '5df86bcf4956d93f5083fd97'
article.author_name = '张三'
article.description = '这是一个国内新闻11111111 此处省略300字'
article.content = '习近平访问美国 这是一个国内新闻11111111'
article.save().then(data => {
console.log(data)
}).catch(err => {
console.log(err)
})
const {mongoose, types} = require('./db')
const Schrma = mongoose.Schema
const UserSchema = new Schrma({
username: {
type: types.String,
unique: true
},
password: types.String,
name: types.String,
age: types.Number,
sex: types.String,
tel: types.Number,
status: {
type: types.Number,
default: 1
}
})
module.exports = mongoose.model('User', UserSchema, 'user')
const {mongoose, types} = require('./db')
const Schrma = mongoose.Schema
const ArticleSchema = new Schrma({
title: {
type: types.String,
unique: true
},
cid: {
type: types.ObjectId
},
author_id: {
type: types.ObjectId
},
author_name: {
type: types.String
},
description: types.String,
content: types.String
})
module.exports = mongoose.model('Article', ArticleSchema, 'article')
const {mongoose, types} = require('./db')
const Schrma = mongoose.Schema
const ArticleCateSchema = new mongoose.Schema({
title: {
type: types.String,
unique: true
},
descripton: types.String,
addtime: {
type: Date,
default: new Date()
}
})
module.exports = mongoose.model('ArticleCate', ArticleCateSchema, 'articlecate')
populate
const ArticleCateModel = require('./mongoose/articlecate')
const ArticleModel = require('./mongoose/article.js')
const UserModel = require('./mongoose/user.js')
ArticleModel.find().populate('cid').exec().then(data => {
console.log(JSON.stringify(data))
}).catch(err => {
console.log(err)
})
ArticleModel.find({}).populate('cid').populate('author_id').exec().then(data => {
console.log(JSON.stringify(data))
}).catch(err => {
console.log(err)
})
const {mongoose, types} = require('./db')
const Schrma = mongoose.Schema
const ArticleSchema = new Schrma({
title: {
type: types.String,
unique: true
},
cid: {
type: types.ObjectId,
ref: 'ArticleCate'
},
author_id: {
type: types.ObjectId,
ref: 'ArticleCate'
},
author_name: {
type: types.String
},
description: types.String,
content: types.String
})
module.exports = mongoose.model('Article', ArticleSchema, 'article')