node使用mongo

node使用mongo

概念

SQL术语/概念MongoDB术语/概念解释/说明
databasedatabase数据库
tablecollection数据库表/集合
rowdocument数据记录行/文档
columnfield数据字段/域
indexindex索引
table joins表连接,MongoDB不支持
嵌入文档MongoDB通过嵌入式文档来替代多表连接
primary keyprimary 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"]}})
条件连接查询
//and
const data = await Table.find({$and:[{title:'3'},{name:'8'}]})

//or
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 }

//$add只支持两种数据类型添加,date和number

更多

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数据库中可用。超级账号,超级权限
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值