1. 首先安装模块mongoose
运行npm i mongoose
2. 添加数据库连接配置文件config/default.js
'use strict'
const db = require('mongoose')
const DB_URL = 'mongodb://localhost:27017/myblog'
db.Promise = global.Promise
db.connect(DB_URL, {
useMongoClient: true,
/* other options */
})
db.connection.once('connected', function () {
console.log("connected mongoodb!")
})
db.connection.on('error', function () {
console.log('connect error')
})
db.connection.on('disconnected', function () {
console.log('Mongoose connection disconnected')
})
module.exports = db
3. 编写model模块,以user为例
const mongodb = require('../config/default.js')
const Schema = mongodb.Schema
let userItem = {
name: String,
password: String
}
let userSchema = new Schema(userItem)
userSchema.set('collection', 'user')
let userModel = mongodb.model("user", userSchema)
module.exports = userModel
schema是mongoose里会用到的一种数据模式,可以理解为表结构的定义;每个schema会映射到mongodb中的一个collection,它不具备操作数据库的能力
model是由schema生成的模型,可以对数据库的操作
这里userItem
为为数据库表结构的通过Schema
对象来建立与数据库的映射,之后将生成的userSchema
Schema对象通过mongoose
的方法来生成可操作的持久化对象
let userModel = mongodb.model("user", userSchema)
这里第一个参数为数据库中的集合名(sql中的表名)
之后就可以通过userModel
来进行增删改查操作
ps:
需要注意的是userSchema.set('collection', 'user')
这句
当我们忽略掉这句时,当对数据库进行写入操作, 能够写入成功,但是却多了一>个加了s的集合 ,即users
集合,原集合没有变化
官方文档解释
When no collection argument is passed, Mongoose produces a collection name by passing the model name to the utils.toCollectionName method. This method pluralizes the name. If you don’t like this behavior, either pass a collection name or set your schemas collection name option.
译文:当没有传入collection参数时,Mongoose会通过model name(就是第一个参数),调用utils.toCollectionName方法产生一个collection name,而这个方法会使name变成复数形式。如果你不想要这个过程,只要传入collection name参数或设置Schema中的collection name选项。
所以需要做如下操作
// or
schema.set('collection', 'user')
//or
var collectionName = 'user'
var M = mongoose.model('Actor', schema, collectionName)
4. 编写test.js
文件测试
const User = require('./user.js')
function inset() {
let user = new User({
name: "mavin",
password: "333"
})
user.save(function (err, res) {
if (err) {
console.log("ERROR" + err)
} else {
console.log("RES " + res)
}
})
}
function update() {
var wherestr = { 'name': 'mavin' }
var updatestr = { 'password': 'zzz' }
User.update(wherestr, updatestr, (err, res) => {
if (err) {
console.log("ERROR" + err)
} else {
console.log(res)
}
})
}
function remove() {
User.remove(wherestr, function (err, res) {
if (err) {
console.log("error" + err)
} else {
console.log(res)
}
})
}
// 分页查询
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()
inset()
在test.js
文件目录执行
node test.js
网友评论