连接数据库后 :
// 查询所有数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 }) Schema 字段定义 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);