mongodb

MongoDB 是一个跨平台的,面向文档的数据库,是当前 NoSQL 数据库产品中最热 门的一种。它介于关系数据库和非关系数据库之间,是非关系数据库当中功能最丰富,最 像关系数据库的产品。它支持的数据结构非常松散,是类似 JSON 的 BSON 格式,因此可以 存储比较复杂的数据类型。

基础概念

SQL术语/概念MongoDB术语/概念解释/说明
databasedatabase数据库
tablecollection数据库表/集合
rowdocument数据记录行/文档
columnfield数据字段/域
indexindex索引
table joins表连接(MongoDB不支持)
primary keyprimary key主键,MongoDB自动在每个集合中添加_id的主键

数据类型

操作

show dbs #列出所有数据库use test #使用数据库(不存在会自动创建,新创建的数据库不显示(至少包含一个集合))db.dropDatabase() #删除当前数据库
 db.createCollection("student")  # 创建集合 db.collection.drop() #删除集合
db.student.insert({"name":"cxk","age":25}) # 插入文档db.student.update({"name":"cxk"},{"name":"xkc"}) #更新文档(替换文档)
db.student.find() # 查询全部db.student.find({"name":"cxk"}) # 按条件查询db.student.find({"name":"cxk"},{name:1,age:1,_id:0}) # 投影
# 创建用户db.createUser(      {            user:"root",              pwd:"root",              roles:[          {role:"root",db:"admin"}          ]            }   )

JAVA操作

<dependency>    <groupId>org.mongodb</groupId>    <artifactId>mongo-java-driver</artifactId>    <version>3.11.0</version></dependency>
MongoClient client = new MongoClient("my-pc");MongoDatabase db = client.getDatabase("db");MongoCollection<Document> spit = db.getCollection("spit");Document d = new Document();d.append("name","jntm");spit.insertOne(d);for (Document document : spit.find()) {    System.out.println(document.getString("name"));}client.close();

Spring data mongodb

node操作

const mongoose = require('mongoose')mongoose.connect('mongodb://localhost/db1', { useNewUrlParser: true, useUnifiedTopology: true })    .then(() => {       console.log('连接成功')    })    .catch(e => console.log(e))
const userSchema = new mongoose.Schema({    name: String,    age: Number})// 返回一个构造函数const User = mongoose.model('User',userSchema)
const user = new User({    name:'cxk',age:18})user.save()
User.create({name:'gdf',age:15},(err,doc)=>{    if (!err){        console.log('插入成功',doc)    }})
// 查询全部User.find().then(result=>console.log(result))// 根据ID查询User.findById('5c09f236aeb04b22f8460967').then(result=>console.log(result))// 根据条件查询User.find({password:'123456'}).then(result=>console.log(result))User.find({ age: { $gt: 20, $lt: 40 } }).then(result => console.log(result))User.find({ hobbies: { $in: ['打豆豆'] } }).then(result => console.log(result))// 投影User.find().select('name password -_id').then(result => console.log(result))// 排序User.find().sort('age').then(result => console.log(result))User.find().sort('-age').then(result => console.log(result)) // 降序// 分页User.find().skip(2).limit(5).then(result => console.log(result))
// 删除符合条件的第一个文档User.findOneAndDelete({name:'cxk'}).then(res=>console.log(res))// 删除符合条件的全部文档User.deleteMany({name:'gdf'}).then(res=>console.log(res))
// 更新符合条件中的第一个User.updateOne({ name: 'gdf' }, { name: 'cxk' }).then(res => console.log(res))// 更新全部符合调价你的User.updateMany({ password: '123456' }, { name: 'cxk' }).then(res => console.log(res))

验证

const userSchema = new mongoose.Schema({    // name必传,否则会报错    name: {        type: String,        required: true    },    age: Number})

其他的验证规则

required: true 必传字段minlength:3 字符串最小长度maxlength: 20 字符串最大长度min: 2 数值最小为2max: 100 数值最大为100enum: ['html', 'css', 'javascript', 'node.js']trim: true 去除字符串两边的空格validate: 自定义验证器default: 默认值

集合关联

// 用户集合const User = mongoose.model('User', new mongoose.Schema({ name: { type: String } }));// 文章集合const Post = mongoose.model('Post', new mongoose.Schema({    title: { type: String },    // 使用ID将文章集合和作者集合进行关联    author: { type: mongoose.Schema.Types.ObjectId, ref: 'User' }}));
Post.find().populate('author').then(r => console.log(r))

GridFS