您的位置:首页 > 数据库 > Mongodb

node 连接MongoDB

2020-03-05 19:43 871 查看

MongoDB

概念:
MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统。
在高负载的情况下,添加更多的节点,可以保证服务器性能。
MongoDB 旨在为WEB应用提供可扩展的高性能数据存储解决方案。
MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组。

SQL概念 MongoDB概念 解释
database database 数据库
table collection 数据库表/集合
row document 数据行/文档
column field 数据字段/域
index index 索引
table joins 表连接,MongoDB不支持
primary key primary key 主键,MongoDB自动将_id字段设置为主键

node连接MongoDB

采用的是Express框架,因此决定使用mongoose来连接MongoDB。

var mongoose=require('mongoose');
mongoose.connect('mongodb://localhost:27017/db');
mongoose.connection.on("connected",()=>{
console.log("MongoDB connected success")
});
mongoose.connection.on("error",()=>{
console.log("MongoDB connected fail")
});
mongoose.connection.on("disconnected",()=>{
console.log("MongoDB connected disconnected")
});

mongoose实际上,可以说是Oracle和mongodb的一个混合产物,但归根接地还是mongodb的。

Oracle MongoDB mongoose
数据库实例 MongoDB实例 Mongoose
模式(Schema) 数据库(database) monogoose
table collection schema+model
row document 实例(instance)
rowid _id _id
Join DBRef DBRef

mongoose概念:

  • Schema: mongoose里会用到的一种数据模式,可以理解为表结构的定义;每个schema会映射到mongodb中的一个collection,它不具备操作数据库的能力
  • Model: 是由schema生成的模型,通过集成Schema定义的基本方法和属性得到相关的内容,可以对数据库进行操作
  • instance: 这就是实实在在的数据了.
    通过 new Model()初始化得到.
let userSchema=mongoose.Schema({
name:String,
age:Number
})
Schema.methods.sayHi=()=>{
console.log('hi')
}
let User=mongoose.model('User',userSchema)
let user=new User({
name:'小明',
age:20
})
user.save((err,user)=>{    //保存数据
if(err){
console.log(err)
}else{
data.sayHi();
}
})

mongoDB不需要提前创建一个collection,在提交save时会自动创建对应的collection,比如上面的名为User的shema,在保存数据的时候会创建一个Users的collection,对,会自动添加一个s。

增删改查操作
增加操作就是上面的save以及create

let params={
name:'小红',
age:20
}
User.create(params,(err,data)=>{})

删除:deleteOne,remove(该方法将被移除,不推荐使用),

let condition={
name:'小红'
}
User.deleteOne(condition,(err,data)=>{})

查询:

let condition={
name:'小明'
}
User.findOne(condition,(err,data)=>{})   //查找一条
User.find(condition,(err,data)=>{})   //多条

findById与findOne相同,但它只接收文档的_id作为参数,返回单个文档
User.findById('_id',(err,data)=>{})

条件查询:
"$lt"(小于),"$lte"(小于等于),"$gt"(大于),"$gte"(大于等于),"$ne"(不等于),"$in"(可单值和多个值的匹配),"$or"(查询多个键值的任意给定值),"$exists"(表示是否存在的意思)"$all".

User.find({age: {"$gte": 18}},(err,data)=>{})  //单个条件
User.find({age: {"$gte": 18, "$lte": 30}},(err,data)=>{})  //多条件  大于等于18小于等于30

User.find({age:{$in: 18}},(err,data)=>{})  // 等于18
User.find({age:{"$in":[18,30]}},(err,data)=>{}) //等于18,30

User.find({$or: [{name: "小明"}, {age: 20}]},(err,data)=>{})  // 查询name为小明或者age为20的所有数据
User.find({$nor: [{name: "小明"}, {age: 20}]},(err,data)=>{}) // 查询name不为小明或者age不为20的所有数据

User.find({name: {$exists: true}},(err,data)=>{})  //所有存在name属性的

模糊查找:
User.find({name: {$regex: '小'}},(err,data)=>{}) //查询所有name中含有xiao的数据

更新:

let condition={
name:'小明'
}
User.updateOne(condition,{$set:{age:21}},(err,data)=>{})   //查找一条
User.update(condition,{$set:{age:21}},(err,data)=>{})   //多条
  • 点赞
  • 收藏
  • 分享
  • 文章举报
DrAlexsander 发布了17 篇原创文章 · 获赞 30 · 访问量 2632 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: