连接数据库后 :
// 查询所有数db据库
show dbs
// 切换/创建数据库,当创建一个集合(table)的时候会自动创建当前数据库
use test
// 插入一条数据
db.fruits.save({name:‘苹果’,price:5})
// 条件查询
db.fruits.find({price:5})
// 得到当前db的所有聚集集合
db.getCollectionNames()
// 查询
db.fruits.find()
安装mysql模块: npm install mongodb --save
连接mongodb
(async () => {
//导入模块
const { MongoClient: MongoDB } = require('mongodb')
// 创建客户端
const client = new MongoDB( 'mongodb://localhost:27017', { userNewUrlParser: true } )
let ret
// 创建连接
ret = await client.connect()
console.log('ret:', ret)
const db = client.db('test')
const fruits = db.collection('fruits')
// 添加文档
ret = await fruits.insertOne({ name: '芒果', price: 20.1 })
console.log('插入成功', JSON.stringify(ret))
// 查询文档
ret = await fruits.findOne()
console.log('查询文档:', ret)
// 更新文档
// 更新的操作符 $set
ret = await fruits.updateOne({ name: '芒果' }, { $set: { name: '苹果' } })
console.log('更新文档', JSON.stringify(ret.result))
// 删除文档
ret = await fruits.deleteOne({name: '苹果'})
await fruits.deleteMany()
client.close()
})()
// 连表查询
fruits.aggregate([{
$lookup: { // 左连接
from: "order", // 关联到order表
localField: "name", // fruits 表关联的字段
foreignField: "name", // order 表关联的字段
as: "orders"
}
}]);
安装: npm install mongoose -S
基本使用:
// mongoose.js
const mongoose = require("mongoose");
// 连接
mongoose.connect("mongodb://localhost:27017/test", { useNewUrlParser: true });
const conn = mongoose.connection;
conn.on("error", () => console.error("连接数据库失败"));
conn.once("open", async () => {
// 定义一个Schema - Table
const Schema = mongoose.Schema({
category: String,
name: String
});
// 编译一个Model, 它对应数据库中复数、小写的Collection
const Model = mongoose.model("fruit", Schema);
try {
// 创建,create返回Promise
let r = await Model.create({
category: "温带水果",
name: "苹果",
price: 5
});
console.log("插入数据:", r);
// 查询,find返回Query,它实现了then和catch,可以当Promise使用
// 如果需要返回Promise,调用其exec()
r = await Model.find({ name: "苹果" });
console.log("查询结果:", r);
// 更新,updateOne返回Query
r = await Model.updateOne({ name: "苹果" }, { $set: { name: '芒果' } });
console.log("更新结果:", r);
// 删除,deleteOne返回Query
r = await Model.deleteOne({ name: "苹果" });
console.log("删除结果:", r);
} catch (error) {
console.log(error);
}
});
mongoose.connect("mongodb://localhost:27017/test", { useCreateIndex: true })
const blogSchema = mongoose.Schema({
title: { type: String, required: [true, '标题为必填项'] }, // 定义校验规则
author: String,
body: String,
comments: [{ body: String, date: Date }], // 定义对象数组
date: { type: Date, default: Date.now }, // 指定默认值
hidden: Boolean,
meta: {
// 定义对象
votes: Number,
favs: Number
}
});
// 定义多个索引
blogSchema.index({ title:1, author: 1, date: -1 });
const BlogModel = mongoose.model("blog", blogSchema);
const blog = new BlogModel({
title: "nodejs持久化",
author: "孤傲",
body: "...."
});
const r = await blog.save();
console.log("新增blog", r);
可选字段类型:
String
Number
Date
Buffer
Boolean
Mixed
ObjectId
Array
// 定义实例方法
blogSchema.methods.findByAuthor = function (author) {
return this.model('blog').find({ author: author }).exec();
}
// 获得模型实例
const BlogModel = mongoose.model("blog", blogSchema);
const blog = new BlogModel({...});
// 调用实例方法
r = await blog.findByAuthor('孤傲');
console.log('findByAuthor', r);