node使用mongo
概念
SQL术语/概念 | MongoDB术语/概念 | 解释/说明 |
---|
database | database | 数据库 |
table | collection | 数据库表/集合 |
row | document | 数据记录行/文档 |
column | field | 数据字段/域 |
index | index | 索引 |
table joins | | 表连接,MongoDB不支持 |
| 嵌入文档 | MongoDB通过嵌入式文档来替代多表连接 |
primary key | primary key | 主键,MongoDB自动将_id字段设置为主键 |
连接mongo
const mongoose = require('mongoose');
mongoose.connect('mongodb://user:pwd@ip:port/database')
数据表
支持的数据类型
String
Number
Date
Buffer
Boolean
Mixed
ObjectId
Array
Decimal128
Map
创建数据表
const table_structure = {
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
}
}
const schema = new mongoose.Schema(table_structure)
const Table = mongoose.model('table_name', schema)
const create = new Table()
create.save().then(() =>
console.log('创建成功')
)
数据操作
const table_structure = {
title: String,
name: String
}
const schema = new mongoose.Schema(table_structure)
const Table = mongoose.model('table_name', schema)
分页
Table.find().skip(40).limit(10)
skip
跳过前面多少条
limit
取多少条
添加数据
const data = {
title: 'title',
name: 'name'
}
const create = new Table(data)
create.save().then(
() => console.log('添加成功')
)
Table.insertMany(data,(err,ret)=>{
console.log(err,ret)
})
Table.insertMany([data,data,data],(err,ret)=>{
console.log(err,ret)
})
删除数据
Table.deleteOne({_id:id},(err,ret)=>{
console.log(err,ret)
})
Table.findByIdAndDelete({_id:id},(err,ret)=>{
console.log(err,ret)
})
Table.findOneAndRemove({_id:id},(err,ret)=>{
console.log(err,ret)
})
Table.findOneAndDelete({_id:id},(err,ret)=>{
console.log(err,ret)
})
修改数据
const option = {}
strict «Boolean|String»覆盖模式的严格模式选项
upsert=false «Boolean»如果为真,并且没有找到文档,则插入一个新文档
writeConcern=null «Object»设置副本集的写入关注点。覆盖模式级别的写入关注点
timestamps=null «Boolean»如果设置为false并启用架构级时间戳,则跳过此更新的时间戳。
Table.updateOne({_id:id},data,{upsert:true},(err,ret)=>{
console.log(err,ret)
})
还有update、updateMany方法,使用方法同上
查询数据
模糊查询
const data = await Table.find({title:/.*?(titlecontent).*/})
精确查询
Table.find({title:'2'},(err,ret)=>{
console.log(err,ret)
})
Table.find({},(err,ret)=>{
console.log(err,ret)
})
Table.findOne({_id:id},(err,ret)=>{
console.log(err,ret)
})
Table.find({ "age" : { $lt: 10 }}).sort({age:1})
$gt:大于
$lt:小于
$gte:大于等于
$lte:小于等于
$ne:不等于
sort()
1 升序排列
-1 降序排列
包含查询
await Table.find({title:{$in:["3","upda222teOne"]}})
await Table.find({title:{$nin:["3","upda222teOne"]}})
条件连接查询
const data = await Table.find({$and:[{title:'3'},{name:'8'}]})
const data = await Table.find({$or:[{title:'3'},{title:'upda222teOne'}]})
聚合查询
求差值($abs)
ratings
{ _id: 1, start: 5, end: 8 }
{ _id: 2, start: 4, end: 4 }
{ _id: 3, start: 9, end: 7 }
{ _id: 4, start: 6, end: 7 }
db.ratings.aggregate([
{
$project: { delta: { $abs: { $subtract: [ "$start", "$end" ] } } }
}
])
{ "_id" : 1, "delta" : 3 }
{ "_id" : 2, "delta" : 0 }
{ "_id" : 3, "delta" : 2 }
{ "_id" : 4, "delta" : 1 }
添加值($add)
sales
{ "_id" : 1, "item" : "abc", "price" : 10, "fee" : 2, date: ISODate("2014-03-01T08:00:00Z") }
{ "_id" : 2, "item" : "jkl", "price" : 20, "fee" : 1, date: ISODate("2014-03-01T09:00:00Z") }
{ "_id" : 3, "item" : "xyz", "price" : 5, "fee" : 0, date: ISODate("2014-03-15T09:00:00Z") }
db.sales.aggregate(
[
{ $project: { item: 1, total: { $add: [ "$price", "$fee" ] } } }
]
)
{ "_id" : 1, "item" : "abc", "total" : 12 }
{ "_id" : 2, "item" : "jkl", "total" : 21 }
{ "_id" : 3, "item" : "xyz", "total" : 5 }
更多
https://docs.mongodb.com/manual/reference/operator/aggregation/
创建用户
use admin
db.createUser({
user: 'root',
pwd: 'root',
roles: [ { role: "root", db: "admin" } ]
})
db:
数据库名称,在哪个数据库创建用户
role:
read:允许用户读取指定数据库
readWrite:允许用户读写指定数据库
dbAdmin:允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile
userAdmin:允许用户向system.users集合写入,可以找指定数据库里创建、删除和管理用户
clusterAdmin:只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限。
readAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读权限
readWriteAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读写权限
userAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的userAdmin权限
dbAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限。
root:只在admin数据库中可用。超级账号,超级权限