MongoDB的范围查询是一种非常强大的功能,它允许你根据文档字段值的范围来检索数据。以下是一些常见的范围查询实践案例:
1. 日期范围查询
假设你有一个博客系统,并且想要查询某个时间段内发布的文章数量。
db.posts.countDocuments({ createdAt: { $gte: new Date("2023-01-01"), $lte: new Date("2023-12-31") } });
2. 数字范围查询
假设你有一个电商系统,并且想要查询某个价格范围内的商品数量。
db.products.countDocuments({ price: { $gte: 100, $lte: 500 } });
3. 字符串范围查询
假设你有一个社交媒体系统,并且想要查询某个字母范围内的用户昵称数量。
db.users.countDocuments({ nickname: { $regex: /^A/, $options: "i" } });
4. 地理位置范围查询
假设你有一个地图应用,并且想要查询某个地理范围内的用户数量。
db.users.countDocuments({ location: { $geoWithin: { $box: [[-10, -10], [10, 10]] } } });
5. 组合范围查询
假设你有一个电商系统,并且想要查询某个价格范围内且评分在某个范围内的商品数量。
db.products.countDocuments({ price: { $gte: 100, $lte: 500 }, rating: { $gte: 4, $lte: 5 } });
6. 复合范围查询
假设你有一个博客系统,并且想要查询某个时间段内且作者为特定用户的文章数量。
db.posts.countDocuments({ createdAt: { $gte: new Date("2023-01-01"), $lte: new Date("2023-12-31") }, author: "authorName" });
7. 排序和范围查询
假设你有一个电商系统,并且想要查询某个价格范围内的商品,并按价格排序。
db.products.find({ price: { $gte: 100, $lte: 500 } }).sort({ price: 1 });
8. 聚合管道中的范围查询
假设你有一个社交媒体系统,并且想要查询某个时间段内且包含特定关键词的用户昵称数量。
db.posts.aggregate([ { $match: { createdAt: { $gte: new Date("2023-01-01"), $lte: new Date("2023-12-31") } } }, { $addFields: { nickname: "$author" } }, { $match: { nickname: { $regex: "keyword", $options: "i" } } }, { $group: { _id: null, count: { $sum: 1 } } } ]);
这些案例展示了MongoDB范围查询的多样性和灵活性,你可以根据具体需求灵活运用这些查询来满足业务场景。