我正在使用AngularJS构建一个食品配送应用程序,并使用Parse.com作为我的BaaS。
用户构建订单后,他们会为订单付款,然后将订单保存到Parse.com。
由于Parse.com上数组列的最大数组大小为128KB,因此我保持订单的表示尽可能简单。我有items
的数组列。要识别items
数组中的每个元素,我只保留objectId
和quantity
。
我的另一个问题是在给定带宽计量的情况下最小化Parse.com查询。
- for each Order
- for each Order Item
- for each Menu Item
- if Order Item ID == Menu Item ID, copy Menu Item data.
我很难相信没有更简单的方法可以做到这一点。但是我见过的大部分文档都没有说明如何通过objectIds检索集合的子集。
我相信这是文档的相关页面:
https://parse.com/docs/js/api/classes/Parse.Query.html
有没有人有任何见解可以解决这个问题的最佳方法,而不会将其分解为多个Parse.com查询?
编辑:如果您需要查看代码,请确定。有用。我只是从算法的角度来看,这是完全没有效率的。
答案 0 :(得分:1)
我认为您可能会忽略一种更好的数据结构化方法。
首先,为了澄清误导性陈述,128KB是Parse中任何类对象的最大大小,而不是数组的最大大小。这是除了Parse Files之外的所有内容。此外,128KB阵列将是庞大的,并且根据描述远远超出您的存储需求。
在构建数据方面,请考虑创建一个名为OrderItem的类。在这个类中,你有一个指向MenuItem的指针和数量的数字。然后在Order类中,创建一个指向OrderItems的指针数组。
这些类可能是这样的:
您应该尽可能频繁地使用指针,以避免数据库中的冗余,并使您的设计尽可能保持一致。我不确定在示例代码中复制菜单项数据的目标是什么,所以我将给出一个不同的例子。
使用此设计,您可以使用以下内容查询所有用户的订单,包括与订单相关的数据:
var query = new Parse.Query("Order");
query.equalTo("user", request.user);
// Include the pointer data (dot notation used for pointer to pointer)
query.include("itemArray.menuItem");
query.find({
success: function(results) {
console.log(results);
// Do something with results
},
error: function() {
response.error("query failed");
}
});