MongoDB查询操作

????启动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' } } }])

上一篇:springboot第76集:线程,ThreadGroup


下一篇:slam系列4:nerf和3dgs-3. 软件