????启动mongo
????启动mongo shell
(1)在指定目录下创建mongodb文件夹、其子文件夹data、log以及文件mongodb.log
cd /home/ubuntu
mkdir -p mongodb/data
mkdir -p mongodb/log
touch mongodb/log/mongodb.log
(2)先执行mongodb命令以启动mongodb服务
mongod --dbpath /home/ubuntu/mongodb/data --logpath /home/ubuntu/mongodb/log/mongodb.log --logappend --fork
(3)进入mongo shell
mongosh
????使用test数据库,并新建items集合,保存订单相关信息
use test
db.createCollection("items")
????批量插入文档数据
每个文档对应订单某个商品相关信息,包括:
-
pnumber:商品编号
-
quantity:商品数量
-
price:商品单价
插入如下商品信息:
db.items.insertMany([
{ quantity: 2, price: 5.0, pnumber: 'p003' },
{ quantity: 2, price: 8.0, pnumber: 'p002' },
{ quantity: 1, price: 4.0, pnumber: 'p002' },
{ quantity: 2, price: 4.0, pnumber: 'p001' },
{ quantity: 4, price: 10.0, pnumber: 'p003' },
{ quantity: 10, price: 20.0, pnumber: 'p001' },
{ quantity: 10, price: 20.0, pnumber: 'p003' },
{ quantity: 5, price: 10.0, pnumber: 'p002' },
])
????查询
????查询结果
使用find({})方法显示所有文档
统计items共有多少个文档数据
db.items.countDocuments()
大于使用gt操作符,另外操作符前面要带上$符号
查询价格大于5的商品
db.items.find({ price: { $gt: 5 } })
????多条件查询
例:查询数量quantity为10且价格price大于等于5的商品数据
db.items.find({ quantity: 10, price: { $gte: 5 } })
例:查询价格大于5小于7的商品
db.items.find({ price: { $gt: 5 , $lt: 7} })
????使用or来进行条件查询
语法格式如下:
db.col.find({ $or: [{ key1: value1 }, { key2: value2 }] })
例:查询数量quantity为10或价格price大于等于5的商品数据
db.items.find({ $or: [{ quantity: 10 }, { price: { $gte: 5 } }] })
????AND和OR联合使用
例:查询编号pnumber为“p003”且数量quantity为10或价格大于等于5的商品数据
db.items.find({ pnumber: 'p003', $or: [{ quantity: 10 }, { price: { $gte: 5 } }] })
????使用聚合aggreate
例:统计订单中所有商品的数量,即统计数量quantity的总和
db.items.aggregate([{ $group: { _id: null, total: { $sum: '$quantity' } } }])
例:通过产品类型来进行分组,然后再统计卖出的数量
db.items.aggregate([{ $group: { _id: '$pnumber', total: { $sum: '$quantity' } } }])
例:通过相同的产品类型来进行分组,然后查询相同产品类型卖出最多的订单详情
db.items.aggregate([{ $group: { _id: '$pnumber', max: { $max: '$quantity' } } }])
例:通过相同的产品类型来进行分组,然后查询每个订单详情相同产品类型卖出的平均价格
db.items.aggregate([{ $group: { _id: '$pnumber', price: { $avg: '$price' } } }])
????管道的使用
例:通过相同的产品类型来进行分组,统计各个产品数量,然后获取最大的数量
db.items.aggregate([{ $group: { _id: '$pnumber', total: { $sum: '$quantity' } } }, { $group: { _id: null, max: { $max: '$total' } } }])