考虑以下数据结构,一旦存储在数据库系统(rdbms 或 nosql)中,查询数据会更好吗?元数据字段中的字段是用户定义的,并且会因用户而异。可能的值是字符串、数字、“日期”甚至数组。
var file1 = {
id: 123, name: "mypicture", owner: 1
metadata: {
people: ["Ben", "Tom"],
created: 2013/01/01,
license: "free",
rating: 4
...
},
tags: ["tag1", "tag2", "tag3", "tag4"]
}
var file2 = {
id: 155, name: "otherpicture", owner: 1
metadata: {
people: ["Tom", "Carla"],
created: 2013/02/02,
license: "free",
rating: 4
...
},
tags: ["tag4", "tag5"]
}
var file1OtherUser = {
id: 345, name: "mydocument", owner: 2
metadata: {
autors: ["Mike"],
published: 2013/02/02,
…
},
tags: ["othertag"]
}
我们的用户应该能够搜索/过滤他们的文件:
- 用户 1:显示“人”数组中“汤姆”所在的所有文件
- 用户 1:显示 2013/01/01 和 2013/02/01 之间“创建”的所有文件
- 用户 1:显示所有“许可”“免费”和“评级”大于 2 的文件
- 用户 2:显示“2012”中“已发布”并标记为“重要”的所有文件
- ...
应该像在 OS X 中使用智能文件夹一样过滤结果。在上传/存储文件之前定义各个元数据字段。但之后它们也可能发生变化,例如,用户 1 可以将元数据字段“people”重命名为“cast”。