MongoDB 提供了丰富的函数,涵盖聚合、查询、数据处理等多个方面,能满足复杂的数据操作需求。我将为你详细介绍这些函数。
聚合函数
- $sum
- 说明:计算指定字段的总和。
- 用法:在聚合管道中使用,如{$group: {_id: “$category”, total: {$sum: “$price”}}}, 这里根据category字段分组,计算每个分组中price字段的总和。
- 示例:假设有一个商品集合products,包含category和price字段,要计算每个类别的商品总价:
db.products.aggregate([ {$group: {_id: "$category", total: {$sum: "$price"}}}]);
- $avg
- 说明:计算指定字段的平均值。
- 用法:在聚合管道中,如{$group: {_id: “$department”, averageSalary: {$avg: “$salary”}}}, 根据department分组,计算每个部门salary的平均值。
- 示例:在员工集合employees中,统计每个部门的平均工资:
db.employees.aggregate([ {$group: {_id: "$department", averageSalary: {$avg: "$salary"}}}]);
- \(max**和**\)min
- 说明:分别返回指定字段的最大值和最小值。
- 用法:在聚合管道中,如{$group: {_id: “$region”, maxSales: {$max: “$sales”}}}, 根据region分组,找出每个地区的最大销售额。
- 示例:在销售数据集合salesData中,查找每个地区的最大和最小销售额:
db.salesData.aggregate([ {$group: {_id: "$region", maxSales: {$max: "$sales"}, minSales: {$min: "$sales"}}}]);
查询函数
- $eq
- 说明:匹配字段值等于指定值的文档。
- 用法:{field: {$eq: value}},例如{age: {$eq: 30}},查找年龄等于 30 的文档。
- 示例:在用户集合users中,查找年龄为 30 岁的用户:
db.users.find({age: {$eq: 30}});
- \(gt**、**\)gte、\(lt**、**\)lte
- 说明:分别表示大于、大于等于、小于、小于等于。用于比较字段值和指定值。
- 用法:如{price: {$gt: 100}}查找价格大于 100 的文档;{score: {$lte: 80}}查找分数小于等于 80 的文档。
- 示例:在商品集合products中,查找价格大于 50 的商品:
db.products.find({price: {$gt: 50}});
- $in
- 说明:匹配字段值在指定数组中的文档。
- 用法:{field: {$in: [value1, value2,…]}},例如{category: {$in: [“electronics”, “clothing”]}},查找类别为电子产品或服装的文档。
- 示例:在商品集合中,查找类别为电子产品或食品的商品:
db.products.find({category: {$in: ["electronics", "food"]}});
数据处理函数
- $addFields
- 说明:向文档中添加新字段或更新现有字段的值。
- 用法:在聚合管道中,如{$addFields: {newField: {$multiply: [“$price”, 1.1]}}},为每个文档添加一个新字段newField,其值为price字段值乘以 1.1。
- 示例:在商品集合中,为每个商品添加一个包含 10% 税的新价格字段:
db.products.aggregate([ {$addFields: {priceWithTax: {$multiply: ["$price", 1.1]}}}]);
- $set
- 说明:更新文档中的字段值。
- 用法:db.collection.updateOne({condition}, {$set: {field: newValue}}),例如db.users.updateOne({name: “John”}, {$set: {age: 31}}),将名为 John 的用户年龄更新为 31。
- 示例:在用户集合中,将用户名为 Alice 的用户的邮箱更新:
db.users.updateOne({username: "Alice"}, {$set: {email: "alice@example.com"}});
- $unwind
- 说明:将文档中的数组字段展开,为数组中的每个元素创建一个新文档。
- 用法:在聚合管道中,如{$unwind: “$tags”},将tags数组字段展开。
- 示例:假设文章集合articles中的每个文档有一个tags数组字段,展开它以查看每个标签对应的文章:
- db.articles.aggregate([
- {$unwind: “$tags”}
- ]);
THE END