面试题答案
一键面试- $match表达式的作用:
- 作用:用于过滤集合中的文档,只保留符合指定条件的文档进入下一个聚合阶段。它类似于SQL中的
WHERE
子句。 - 示例:假设有一个
products
集合,包含name
、price
和category
字段,要筛选出价格大于50的产品文档。
db.products.aggregate([ { $match: { price: { $gt: 50 } } } ]);
- 作用:用于过滤集合中的文档,只保留符合指定条件的文档进入下一个聚合阶段。它类似于SQL中的
- $group表达式的作用:
- 作用:用于根据指定的字段对文档进行分组,并对每个组应用累加器(如
$sum
、$avg
等)操作。它类似于SQL中的GROUP BY
子句。 - 示例:统计
products
集合中每个类别下产品的数量。
db.products.aggregate([ { $group: { _id: "$category", count: { $sum: 1 } } } ]);
- 作用:用于根据指定的字段对文档进行分组,并对每个组应用累加器(如
- $project表达式的作用:
- 作用:用于修改输出文档的结构,选择要包含或排除的字段,还可以创建新的计算字段。它类似于SQL中的
SELECT
子句。 - 示例:在
products
集合中,只输出产品的name
和price
字段。
db.products.aggregate([ { $project: { name: 1, price: 1, _id: 0 } } ]);
- 作用:用于修改输出文档的结构,选择要包含或排除的字段,还可以创建新的计算字段。它类似于SQL中的
- 使用$group和$sum表达式统计集合中每个类别下文档的某个数值字段总和:
- 假设
products
集合结构如下:
[ { "name": "Product1", "price": 20, "category": "Electronics" }, { "name": "Product2", "price": 30, "category": "Clothing" }, { "name": "Product3", "price": 40, "category": "Electronics" } ]
- 统计每个类别下产品的价格总和:
db.products.aggregate([ { $group: { _id: "$category", totalPrice: { $sum: "$price" } } } ]);
- 上述聚合操作会根据
category
字段对文档进行分组,然后使用$sum
累加器计算每个类别下price
字段的总和,并将结果以totalPrice
字段输出。结果类似如下:
[ { "_id": "Electronics", "totalPrice": 60 }, { "_id": "Clothing", "totalPrice": 30 } ]
- 假设