mongoDb简介
- 分布式文件存储型的开源NoSQL数据库
- 用于存储费结构化数据
- SQL中的绝大多数操作有对应的方式来实现
- 采用BSON(类JSON的二进制存储格式)
以下均是基于Robo 3T 对mongo数据的操作
一 、基本操作
1.1 数据插入
db.A.insertMany([
{ item: "journal", qty: 25, size: { h: 14, w: 21, uom: "cm" }, status: "A" },
{ item: "notebook", qty: 50, size: { h: 8.5, w: 11, uom: "in" }, status: "A" },
{ item: "paper", qty: 100, size: { h: 8.5, w: 11, uom: "in" }, status: "D" },
{ item: "planner", qty: 75, size: { h: 22.85, w: 30, uom: "cm" }, status: "D" },
{ item: "postcard", qty: 45, size: { h: 10, w: 15.25, uom: "cm" }, status: "A" }
]);
1.1数据查询
db.inventory.find( {} )
等同于 SELECT * FROM inventory
表示查询inventory表下的所有数据
db.inventory.find( { status: "D" } )
等同于 SELECT * FROM inventory WHERE status = "D"
表示查询集合inventory中status=“D”的数据
db.inventory.find( { status: "A", qty: { $lt: 30 } } )
等同于SELECT * FROM inventory WHERE status = "A" AND qty < 30
db.inventory.find( { $or: [ { status: "A" }, { qty: { $lt: 30 } } ] } ) 等同于 SELECT * FROM inventory WHERE status = "A" OR qty < 30
db.inventory.find( {
status: "A",
$or: [ { qty: { $lt: 30 } }, { item: /^p/ } ]
} )
等同于SELECT * FROM inventory WHERE status = "A" AND ( qty < 30 OR item LIKE "p%")
嵌套数据查询
db.inventory.find( { size: { w: 21, h: 14, uom: "cm" } } )
查询表中所有size等于 { h: 14, w: 21, uom: "cm" }: 的数据
db.inventory.find( { "size.uom": "in" } )
表示查询inventory中在size的uom字段中等于“cm”的数据
注意:集合名外用英文单引号,阈值C如果不是数字,也必须使用单引号,且所以的字符都必须是英文格式下的。
组合数据查询
db.A.find(
{entrance :'20001',channel:'web'}
).sort({createdDate:-1}).limit(5)
等同于select * from A where entrance=‘20001’ and channel="web" order by createdDate desc limit 5
数据为空查询
db.inventory.find( { item : { $type: 10 } } )
表示仅仅对item为空的数据,返回所有type=10的查询结果
db.inventory.find( { item : { $exists: false } } )
表示只返回item不存在的记录数据
1.3 数据删除
db.inventory.deleteMany({ })
等同于 delet from inventory,
表示删除对应表中的所有数据
db.inventory.deleteMany({ status : "A" })
等同于 delet from inventory where status="A"
表示删除表中满足特定条件的数据
db.inventory.deleteOne( { status: "D" } )
等同于 delet from inventory where status="D" limit 1
表示删除表中满足特定条件的数据中的第一条
db.inventory.remove( { } )
等同于 delet from inventory,
表示删除对应表中的所有数据
db.inventory.remove( { qty: { $gt: 20 } }, true ) 写ture或1都可以
等同于 delet from inventory where qty>20 limit 1
表示删除表中满足特定条件的数据中的第一条
注意:remove()和deleteMany()删除的功效都差不多,但是deleteMany()会返回每次的有效删除个数,这个是我目前发现的唯一的一点区别差异
)