如何在CouchDB/NoSQL中实现多态对象?

如何在CouchDB/NoSQL中实现多态对象?,nosql,couchdb,polymorphism,Nosql,Couchdb,Polymorphism,我想在NoSQL/文档数据库中实现多态对象? 什么是最佳实践 例如: 硕士班 项目对象(所有项目都应具有Item.Title、Item.Subtitle、Item.IconURL) 子类:ItemPhoto、ItemPDF、ItemURL、ItemHTML (每个子类将具有不同的属性) 我想列出所有项目的一般-然后得到具体的数据时,我深入 可能的选项: 保存两个不同的文档-主/子类型(&ID) 使用内部项对象将所有文档另存为子类 其他选择 谢谢CouchDB存储文档(数据),而不是类(带代码的数

我想在NoSQL/文档数据库中实现多态对象? 什么是最佳实践

例如: 硕士班 项目对象(所有项目都应具有Item.Title、Item.Subtitle、Item.IconURL)

子类:ItemPhoto、ItemPDF、ItemURL、ItemHTML (每个子类将具有不同的属性)

我想列出所有项目的一般-然后得到具体的数据时,我深入

可能的选项:

保存两个不同的文档-主/子类型(&ID) 使用内部项对象将所有文档另存为子类

其他选择

谢谢

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...
  }
}
显然,您可以将属于某个项目的所有代码放在一个项目类中,并使用文档中的数据创建该类的实例。但这是您的选择,不会改变CouchDB处理文档的方式