MongoDB
1. 简介
- MongoDB是一个非关系型数据库(NoSQL). 非常适合超大数据集的存储, 由 C++ 语言编写,旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。
- 下面是Sql与mongodb的术语对比
SQL | Mongodb |
---|---|
表(Talbe) | 集合(Collection) |
行(Row) | 文档(Document) |
列(Col) | 字段(Field) |
主键(Primary Key) | 对象ID(ObjectId) |
mac的安装:https://blog.csdn.net/qq991658923/article/details/121436106
-
Mac启动:
-
mongod --dbpath /opt/mongodb/data --logpath /opt/mongodb/log/mongo.log --fork
-
mongo
show dbs: 显示所有数据库 show databases: 显示所有数据库 use xxxx: 使用指定数据库/创建数据库(新库中插入数据才可以显示新库) db: 当前正在使用的数据库 db.dropDatabase(): 删除数据库 show collections: 显示当前数据库中所有的集合(表)
Object ID: 主键ID【"_id" : ObjectId("56063f17ade2f21f36b03133")】 String: 字符串 Boolean: 布尔值 Integer: 数字 Doube: 小数 Arrays: 数组,[1,2,3] Object: 文档(关联其他对象) {sname: 李嘉诚, sage: 18, class:{cccc}} Null : 空值 Timestamp: 时间戳 Date: 时间日期
4.2 mongodb插入数据/文档
#collection_name集合/表不存在则会新建 db.collection_name.insert({字段:值,字段:值}) # 示例 db.c1.insert({name:"bobo", age:18, hobby:['eat', 'sleep']}) # 插入多条数据 #c1是表名/集合名 db.getCollection('c1').insertMany([ { "name":"bobo", }, { "address":"河北" }, ] );
db.stu.find()
#d1是表名 db.d1.update({查询条件}, {待修改内容}, {multi: 是否多条数据修改}) multi:true表示修改满足条件所有的内容,否则只修改满足条件的第一条内容,multi不写默认为false # 示例 db.d1.update({name:"bobo"}, {$set:{title:"alex", hobby:['抽烟', '喝酒', '烫头']}}, {multi:true});
# remove() db.collection_name.remove({条件}, {justOne:true|false}) db.collection_name.remove() 删除所有记录 db.collection_name.drop() 删除collection/表 # 示例 db.nor_col.remove({name:"jay"}, {justOne:true}) # deleteOne() db.collection_name.deleteOne({条件}) # 示例 db.nor_col.deleteOne({name:"jay"}) # deleteMany() db.collection_name.deleteMany({条件}) # 示例 db.nor_col.deleteMany({name:"jay"})
准备数据:
db.stu.insert([ {name: "朱元璋", age:800, address:'安徽省凤阳', score: 160}, {name: "朱棣", age:750, address:'江苏省南京市', score: 120}, {name: "朱高炽", age:700, address:'北京紫禁城', score: 90}, {name: "李嘉诚", age:38, address:'香港xxx街道', score: 70}, {name: "麻花藤", age:28, address:'广东省xxx市', score: 80}, {name: "大老王", age:33, address:'火星第一卫星', score: -60}, {name: "咩咩", age:33, address:'开普勒225旁边的黑洞', score: -160} ])
db.c1.find() 查询所有 db.c1.find({"字段":"固定值"}) 查询满足条件的所有数据 db.c1.findOne({条件}) 查询满足条件的第一条数据 db.getCollection('c1').find({"字段1":"固定值1","字段2":"固定值2"})
# 等于: 默认是等于判断, $eq # 小于:$lt (less than) # 小于等于:$lte (less than equal) # 大于:$gt (greater than) # 大于等于:$gte # 不等于:$ne db.stu.find({age:28}) 查询年龄是28岁的学生信息 db.stu.find({age: {$eq: 28}}) 查询年龄是28岁的学生信息 db.stu.find({age: {$gt: 30}}) 查询年龄大于30岁的学生 db.stu.find({age: {$lt: 30}}) 查询年龄小于30岁的学生 db.stu.find({age: {$gte: 38}}) 查询年龄大于等于30岁的学生 db.stu.find({age: {$lte: 38}}) 查询年龄小于等于30岁的学生 db.stu.find({age: {$ne: 38}}) 查询年龄不等于38的学生
# and # $and: [条件1, 条件2, 条件3....] 查询年龄等于33, 并且, 名字是"大老王"的学生信息 db.stu.find({$and:[{age: {$eq:33}}, {name:'大老王'}]}) # or # \$or: [条件1, 条件2, 条件3] 查询名字叫"李嘉诚"的, 或者, 年龄超过100岁的人 db.stu.find({$or: [{name: '李嘉诚'}, {age: {$gt: 100}}]}) # nor # $nor: [条件1, 条件2, 条件3] 查询年龄不小于38岁的人, 名字还不能是朱元璋. db.stu.find({$nor: [{age: {$lt: 38}}, {name: "朱元璋"}]})
# 使用\$in, \$nin判断数据是否在某个数组内 db.stu.find({age: {$in:[28, 38]}}) 年龄是28或者38的人
# 使用$regex进行正则表达式匹配 db.stu.find({address: {$regex:'^北京'}}) 查询地址是北京的人的信息 db.stu.find({address: /^北京/}) 效果一样
# 跳过3个. 提取3个. 类似limit 3, 3 可以用来做分页 db.stu.find().skip(3).limit(3)
# sort({字段:1, 字段:-1}) # 1表示升序 # -1表示降序 # 对查询结果排序, 先按照age升序排列, 相同项再按照score降序排列 db.stu.find().sort({age:1, score: -1})
# count(条件) 查询数量 db.stu.count({age:33})