// 适用于一对一或一对少关系
{
_id: "order123",
customer: {
name: "John Doe",
email: "john@example.com"
},
items: [
{ product: "Laptop", quantity: 1 },
{ product: "Mouse", quantity: 2 }
]
}
// 适用于一对多或多对多关系
// 用户集合
{
_id: "user123",
name: "Alice",
posts: ["post1", "post2"]
}
// 帖子集合
{
_id: "post1",
title: "First Post",
content: "..."
}
// 博客文章带评论计数
{
_id: "blog123",
title: "MongoDB Tips",
content: "...",
comment_count: 42,
last_comment: {
user: "reviewer1",
text: "Great post!"
}
}
// 适用于时间序列数据
{
_id: "sensor123_202301",
sensor_id: "sensor123",
date: ISODate("2023-01-01"),
readings: [
{ time: "00:00", value: 23.5 },
{ time: "01:00", value: 23.7 }
],
avg_value: 23.6
}
// 创建索引示例
db.orders.createIndex({ customer_id: 1, order_date: -1 })
db.products.createIndex({ category: 1, price: 1 }, { partialFilterExpression: { stock: { $gt: 0 } } })
skip()
和limit()
或基于游标的分页// 优化查询示例
db.users.find(
{ status: "active", age: { $gt: 18 } },
{ name: 1, email: 1, _id: 0 }
).sort({ created_at: -1 }).limit(10)
// 启用分片示例
sh.enableSharding("mydb")
sh.shardCollection("mydb.orders", { customer_id: 1 })
db.setProfilingLevel()
$indexStats
聚合阶段// 使用explain分析查询
db.orders.find({ status: "shipped" }).explain("executionStats")
通过合理应用这些建模技巧和优化策略,可以显著提高MongoDB应用的性能和可扩展性。