我正在使用Typescript处理Angular 2 / Ionic 2中的旅行应用程序。我需要弄清楚如何建模我的服务/对象。这个应用程序将有用户。
每个用户都可以创建一个整体旅行。你可以将它命名为#34; Europe 2016。"然后你可以添加多天。他们可能会旅行14天。他们每天都可以计划当天的活动,包括活动时间,活动地点等等。他们还可以查看天气,添加酒店信息等等。
大致可能看起来像(对不起,这很难看)
Trip: {
"name": "Europe 2016",
"tripPlans": [
{"day1": [{plan1: do something, time: 01000}, {plan2: do something else, time: 01000}}], "time": "0800", "date":"09/01"2016, hotel, weather},
{"day2": [{plan1: do something, plan2: do something}], "time": "0800", "date":"09/01"2016, hotel info, weather info}
]
}
还需要知道旅行的第一个和最后一个日期。
我也可能想回去查询用户群体的热门内容,例如" Gotham中最常见的活动"
这是我花了100个小时学习编码后的第一个主要应用程序,我的个人项目让我兴奋不已。它解决了我的个人问题。我已经到了这样的地步,我很难找到好的例子/资源来帮助我解决这个问题。
我已经花了很多时间参与框架选择,所以我想坚持下去。到目前为止,我已尝试使用PouchDB / CouchDB。我目前只在Ionic中构建移动版本。
任何建议都会受到赞赏,即使它的github计划要查看,你已经保存过的教程等等。
答案 0 :(得分:1)
我主要使用CouchDB,但我也开始使用PouchDB / CouchDB开发Ionic应用程序。首先,你需要知道当你有很多嵌套文档时NoSQL是好的,但有时候你不能选择做关系"。
首先,我重新设计了一下你的数据模型:
{
"name": "Europe 2016",
"type": "trip",
"tripPlans": [{
"name": "This is the first plan",
"days": {
"day1": [{
"registeredActivityId": null,
"plan": "do something",
"time": 1000
}, {
"registeredActivityId": "activty_goToTheMoon",
"plan": "Go to the moon and the previous activity",
"time": 1000
}],
"time": "0800",
"date": "09/01/2016",
"hotel": "Hotel name",
"weather": "Sunny"
}
}]
}
现在,您没有多少选择:
您可以在嵌套的活动中构建一个视图,例如
function(doc) {
if (doc.type == "trip" && doc.tripPlans && doc.tripPlans.join)
for (var i = 0; i < doc.tripPlans.length; i++) {
var plan = doc.tripPlans[i];
if (plan.days)
for (var n in plan.days)
if (plan.days.hasOwnProperty(n)) {
var day = plan.days[n];
//We emit the activity id for a better tracking.
//If it's not available, we emit the description(not recommanded)
emit(day.registeredActivityId ? day.registeredActivityId : day.plan);
}
}
}
您可以在文件之间建立关系
如果经常计算视图,则使用嵌套方法可以加快查询速度。否则,&#34;关系方法&#34;使链接更容易&#34;预定义的活动&#34;例如。如果您需要更多信息,可以私下与我联系。