【发布时间】:2017-03-31 07:01:38
【问题描述】:
在以下模型中,产品归客户所有。并且不能被其他客户订购。所以我知道客户 1 的订单中只能有客户 1 拥有的产品。
这里给你一个想法是数据模型的一个简单版本:
订单:
{
'customer' : 1
'products' : [
{'productId' : 'a'},
{'productId' : 'b'}
]
}
产品:
{
'id' : 'a'
'name' : 'somename'
'customer' : 1
}
我需要查找包含某些产品的订单。我知道产品 ID 和客户 ID。我可以随意在我的数据库上添加/更改索引。
现在我的问题是。仅在产品 ID 上添加单个字段索引并仅使用该 ID 进行查询是否更快。还是我应该使用包含客户和产品 ID 的复合索引?
我不确定这是否重要,但在我的真实模型中,产品列表实际上是具有产品数量和 dbref 的对象列表。而且客户也是一个dbref。
这是一个完整的订单对象:
{
"_id" : 0,
"_class" : "nl.pfa.myprintforce.models.Order",
"orderNumber" : "e35f1fa8-b4c4-4d53-89c9-66abe94a3553",
"status" : "ERROR",
"created" : ISODate("2017-03-30T11:50:50.292Z"),
"finished" : false,
"orderTime" : ISODate("2017-01-12T12:50:50.292Z"),
"expectedDelivery" : ISODate("2017-03-30T11:50:50.292Z"),
"totalItems" : 19,
"orderItems" : [
{
"amount" : 4,
"product" : {
"$ref" : "product",
"$id" : NumberLong(16)
}
},
{
"amount" : 7,
"product" : {
"$ref" : "product",
"$id" : NumberLong(26)
}
},
{
"amount" : 8,
"product" : {
"$ref" : "product",
"$id" : NumberLong(7)
}
}
],
"stateList" : [
{
"timestamp" : ISODate("2017-03-28T11:50:50.074Z"),
"status" : "NEW",
"message" : ""
},
{
"timestamp" : ISODate("2017-03-29T11:50:50.075Z"),
"status" : "IN_PRODUCTION",
"message" : ""
},
{
"timestamp" : ISODate("2017-03-30T11:50:50.075Z"),
"status" : "ERROR",
"message" : "Something went wrong"
}
],
"customer" : {
"$ref" : "customer",
"$id" : ObjectId("58dcf11a71571a24c475c044")
}
}
【问题讨论】: