例如,如果我想存储人们访问过哪些城市,那么每个城市都会有多个访问者,并且每个人都会访问不止一次的城市,我应该如何实现呢?
有时我想查询城市属性(例如所有访问过法国城市的人),有时我可能想查询人员属性(所有 30 岁以下的人访问过的城市)。
我自己想到了两种方法:
- 在每个城市对象中包含一组游客,在每个人对象中包含一组城市。但是,这意味着将相同的数据存储两次,并且可能会使对象变大。
- 创建一个额外的对象“访问”,存储城市和人的 ID。
选项二对我来说似乎是最好的。但是,我认为这两个查询示例中的每一个都需要至少三个 ScriptDB 查询。'anyOf' 也会变得非常大,我不确定这是否是一个问题。
例子:
var db = ScriptDb.getMyDb();
var cityResult = db.query({type: 'city', country: 'France'});
var citiesInFrance= getAllCityIds(cityResult);
var visitResult = db.query({type: 'visit', cityId: db.anyOf(citiesInFrance)});
var personsVisitedFrance = getAllPersonIds(visitResult);
var personResult = db.query({type: 'person', personId: db.anyOf(personsVisitedFrance)});
这似乎有些麻烦,尤其是与 oldskool sql 查询相比。这是要走的路,还是我应该完全研究其他东西?