db.COLLECTION_NAME.insert(document)
db.COLLECTION_NAME.save(document)
insert()和save()方法的区别在于使用insert()方法插入文档时,集合中已存在该文档,则会报错;使用save()方法时,则会覆盖。
db.COLLECTION_NAME.insertMany([document1,document2,···])
语法:
db.COLLECTION_NAME.update(criteria,objNew,upsert,multi)
update():更新文档的方法
criteria:更新的查询条件,类似于sql中的where
objNew:新的对象和操作符,类似于sql中的set
upsert:不存在更新对象时,是否插入,默认为false
multi:默认为false,只更新查找到的第一个文档,反之更新所有
db.COLLECTION_NAME.remove(
,
{
justOne:,
writeConcern:
}
)
db.COLLECTION_NAME.remove({})
db.COLLECTION_NAME.find()
db.COLLECTION_NAME.find().pretty()
基础语法:db.集合名.find(条件[,查询的列])
db.集合名.find({键:值}) 注:值不直接写
{运算符:值}
db.集合名.find({
键:{运算符:值}
})
聚合管道操作是将文档在一个管道处理完毕后,把处理的结果传递给下一个管道进行再次处理。聚合管道是使用不同的管道阶段操作器进行不同聚合操作,管道阶段操作器也可称为管道操作符,常见管道操作符如下表:
db.集合名称.aggregate([
{管道:{表达式}}
····
])
其中'[]'不是必须的,可以省略!!
索引是一种特殊的数据结构,即采用B-Tree数据结构。索引是以易于遍历读取的形式存储着集合中文档的一小部分,文档的一小部分指文档中的特定字段或一/多组字段,并且这些字段均按照字段的值进行排序。索引项的排序支持有效的等值匹配和基于范围的查询操作。此外,MongoDB还可以使用索引中的排序返回排序的结果。
MongoDB支持在文档的单个字段上创建用户定义的升序/降序索引,因此被称为单字段索引(Single Field Index)。默认情况下,MongoDB中所有集合在“_id”字段上都有一个索引,用户也可以根据自己的需求添加额外索引来支持重要的查询和操作。由于MongoDB可以从任何方向遍历索引,因此对于单个字段索引和排序操作来说,索引项的排序顺序(即升序或降序)并不重要。
MongoDB除了支持单字段索引外,还支持复合索引。所谓复合索引,就是包含多个字段的索引,一个复合索引最多可以包含31个字段。需要注意的是,若某字段属于哈希索引,则这时复合索引就不能包括该字段。
若文档中的字段为数组类型,则每个字段都是数组中的一个元素,MongoDB将会为数组中的每个元素创建索引,因此被称为多键索引(Multikey Index)。多键索引允许通过匹配数组的一个或多个元素来查询包含该数组的文档。如果索引字段包含数组值,则MongoDB会自动确定是否创建多键索引,而无需显式地指定创建多键索引。
db.COLLECTION_NAME.totalIndexSize()
db.COLLECTION_NAME.createIndex(keys,options)
keys:指定索引键及排序顺序,该参数值为文档类型,key用于指定索引键,value指定排序顺序,1为升序,-1为降序
options:用于控制创建索引的选项,常见选项有unique和name,其中unique描述建立的索引是否唯一,默认为false。name描述所创建索引的名称,默认情况下MongoDB会通过连接索引的字段名和排序顺序生成一个索引名称。
db.COLLECTION_NAME.dropIndexes()
db.COLLECTION_NAME.dropIndex(index)
实验目的:
掌握MongoDB 文档复杂查询
掌握MongoDB文档聚合查询
实验题目:
首先,我们需要创建一个MongoDB数据库test
,并在其中创建一个items
集合,并插入给定的商品信息。以下是具体的MongoDB命令操作:
如果你已经安装了MongoDB并在本地运行,你可以直接打开一个新的命令行窗口并输入mongo
来连接到MongoDB服务器。
test
数据库:use test
items
集合:由于我们是在一个空的数据库中创建集合,因此不需要显式创建集合,当我们第一次向集合中插入文档时,集合会自动被创建。
quantity:商品数量【商品卖出数量 】
price:商品单价
pnumber:商品编号【也是商品类型】
插入如下商品信息:
{"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"}
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"}
])
db.items.find()
这将返回items
集合中的所有文档。
db.items.find({ price: { $gt: 5 } })
这里使用了$gt
操作符,它代表“大于”。
db.items.find({ quantity: 10, price: { $gte: 5 } })
这里使用了$gte
操作符,它代表“大于或等于”。
聚合查询是MongoDB提供的一种强大的数据分析功能,它可以对数据进行各种转换和聚合操作。以下是我们将要执行的聚合查询:
db.items.aggregate([
{ $group: { _id: null, totalQuantity: { $sum: "$quantity" } } }
])
这里使用了$group
阶段来分组文档,并使用$sum
操作符来计算quantity
字段的总和。_id: null
表示所有文档都被分到同一组中。
db.items.aggregate([
{ $group: { _id: "$pnumber", totalQuantity: { $sum: "$quantity" } } }
])
这里我们使用$group
阶段来分组文档,根据pnumber
字段来分组,并计算每个组的quantity
总和。
db.items.aggregate([
{ $group: { _id: "$pnumber", totalQuantity: { $sum: "$quantity" } } },
{ $sort: { totalQuantity: -1 } },
{ $limit: 1 }
])
在这个聚合管道中,我们首先按pnumber
分组并计算总数掶,然后按总数掶降序排序,最后通过$limit
阶段限制结果集为1,以获取卖出数掶最多的商品类型。
db.items.aggregate([
{ $group: { _id: "$pnumber", totalQuantity: { $sum: "$quantity" } } },
{ $sort: { totalQuantity: -1 } },
{ $limit: 1 }
])
与上一个查询类似,我们首先按pnumber
分组并计算总数掶,然后按总数掶降序排序,最后通过$limit
阶段限制结果集为1,以获取卖出数掶最多的商品类型。
以上就是两个实验的所有步骤和查询。