mongodb的使用

终端命令行指令

连接数据库后 :

// 查询所有数db据库
show dbs
// 切换/创建数据库,当创建一个集合(table)的时候会自动创建当前数据库
use test
// 插入一条数据
db.fruits.save({name:‘苹果’,price:5})
// 条件查询
db.fruits.find({price:5})
// 得到当前db的所有聚集集合
db.getCollectionNames()
// 查询
db.fruits.find()

mongodb原生驱动

  • 安装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"
  }
}]);

Mongoose模块

  • 安装: 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);

你可能感兴趣的:(node,数据库,mongodb)