设计Schema以在MongoDB上执行排序操作
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了设计Schema以在MongoDB上执行排序操作相关的知识,希望对你有一定的参考价值。
我使用Mongoose来设计模式。我有两个名为餐馆和产品的系列。我一直在Restaurant Collection收集所有餐厅的详细信息。在Products Collection中,我有一个名为restaurantCode的字段,它在Restaurant Collection中以_id形式显示,并成功映射了两个集合。现在在前端使用Angular 5,我已经控制了Restuarant所有者按照他们的意愿对产品进行排序。为了执行此操作,我在Products集合中创建了一个名为sortIndex的新字段,并指定了从0到最多每个餐厅可用产品数量的值。在下面发布我的虚拟数据
餐厅细节
1)
_id : "ABC",
"Name" : "Eat Well Restaurant",
2)
_id : "DEF",
"Name" : "Eat ALL Restaurant",
产品详情
1)
"name": "Pizza",
"Price": 20,
"restaurantCode" : "ABC",
"sortIndex": 0
2)
"name": "Juice",
"Price": 30,
"restaurantCode" : "ABC",
"sortIndex": 1
3)
"name": "Fruit",
"Price": 20,
"restaurantCode" : "ABC",
"sortIndex": 2
4)
"name": "Chicken Rice",
"Price": 20,
"restaurantCode" : "DEF",
"sortIndex": 0
5)
"name": "Chicken Fry",
"Price": 20,
"restaurantCode" : "DEF",
"sortIndex": 1
6)
"name": "Chicken Briyani",
"Price": 20,
"restaurantCode" : "DEF",
"sortIndex": 2
我是根据sortIndex值显示产品的。现在,每当用户在前端(Angular)执行排序操作时,我将重新分配sortIndex值。问题是每当餐馆老板删除产品时,我必须为与特定餐馆相关联的所有产品重新分配sortIndex值。我觉得这是一项昂贵的操作。这是我一直使用的方法,它工作正常。我想知道有没有更好的方法解决这个问题,我相信会有一个。我的堆栈是NodeJS,Mongoose,MongoDB,Angular(前端)留下你的想法/想法。谢谢
看来你的设计是这样的
var restaurantSchema = new Schema({
_id: String,
Name: String
});
var productSchema = new Schema({
name: String,
Price: Number,
restaurantCode: { type: String, ref: 'Restaurant' },
sortIndex: Number
});
var Restaurant = mongoose.model('Restaurant', restaurantSchema);
var Product = mongoose.model('Product', productSchema);
如果您想保留两个集合,则可以在您的餐厅架构中添加字段products
,并在产品架构中使用sortIndex
。这个products
字段将是一个排序的引用数组(不按其ID排序,而是按其位置排序)。
var restaurantSchema = new Schema({
_id: String,
Name: String,
products: [{ type: Schema.Types.ObjectId, ref: 'Product' }]
});
var productSchema = new Schema({
name: String,
Price: Number,
restaurantCode: { type: String, ref: 'Restaurant' }
});
保存特定餐馆的产品列表的排序顺序时,您必须按照放置的顺序发送所有产品ID的数组。
删除产品时,您将从Products集合中删除它,并删除相关餐厅中的引用。通常,如果您遵循RESTful设计,您的删除路线将类似于DELETE /restaurants/:rid/products/:pid
。
以上是关于设计Schema以在MongoDB上执行排序操作的主要内容,如果未能解决你的问题,请参考以下文章
PySpark local模式执行读取mongodb报错 Exception: Java gateway process exited before sending its port number(代