我想在NoSQL / Document DB中实现Polymorphic对象? 什么是最佳做法?
实施例: 硕士课 项目对象(所有应该有Item.Title,Item.Subtitle,Item.IconURL)
子类:ItemPhoto,ItemPDF,ItemURL,ItemHTML (每个子类都有不同的属性)
我想列出所有项目 - 然后在我向下钻取时获取具体数据。
可能的选项:
保存两份不同的文件 - 主人/儿童类型& ID 将所有内容保存为具有内部项目对象的子类文档
其他选项??
由于
答案 0 :(得分:1)
CouchDB存储文档(数据),而不是类(带代码的数据)。 map,validation,list和show函数中的代码处理文档,但这些文档只是带有数据的普通对象。
在您的示例中,您可以定义库函数以检查给定文档是否包含项目的数据,然后使用此函数来决定要执行的操作。例如:
// in a "appTypes" library:
exports.isItem = function(doc) {
return doc.Title && doc.Subtitle && doc.IconURL;
}
// in a map function
function(doc) {
var appTypes = require('appTypes');
if (appTypes.isItem(doc)) {
// doc is an Item...
}
}
显然,您可以将属于Item的所有代码放在Item类中,并使用doc中的数据创建该类的实例。但这是您的选择,并不会改变CouchDB处理文档的方式。