'use strict';
var mongoose = require('mongoose');
var extend = require('mongoose-schema-extend');
var Schema = mongoose.Schema;
var meta = require('./plugins/meta');
var utils = require('./plugins/utils');
var Model = function(){
/**
* Thing - самый общий тип чего-либо.
* Базовая схема для всех элементов системы
* Изменение данной схемы
* влияет на все элементы системы
*
* @class Thing
* @see http://ruschema.org/Thing
* @version 0.0.1
*
*/
var _Schema = mongoose.Schema(
/** @lends Thing.prototype */
{
/**
* Предки.
* Массив идентификаторов предков
*/
parents: [],
/**
* Родитель.
* Прямая связь с родителем элемента
*/
parentRef: { type: Schema.Types.ObjectId },
/**
* Full path of document
* @see https://groups.google.com/forum/#!topic/mongodb-user/34JQVzyR91o
* @see http://docs.mongodb.org/manual/tutorial/model-tree-structures-with-materialized-paths/
*
* @example
*
* //поиск все потомков:
* { path: /^,_id1/ }
* { path: /^,_id1,_id2,_id3/ }
*
* db.categories.find( { path: /^,Books,/ } )
* db.categories.find( { path: /^Books,/ } )
*
*
*/
path: {
type: String,
trim: true,
index: true
},
/**
*
* Дополнительный тип для элемента, который обычно используется
* для добавления более конкретных типов от внешних словарей
* в синтаксис микроданных.
*
* Это отношения между чем-то и классом к которому он принадлежит.
* В синтаксисе RDFa, лучше использовать родной синтаксис RDF -
* аттрибут "TypeOf" для множественных типов.
*
* Инстументы Schema.org могут слабо понимать дополнительные типы,
* особенно те, которые определены извне.
*/
additionalType: {
type: String
},
typeOf: {
type: String
},
/**
* Короткое описание записи.
*/
description: {
type: String
},
/**
* URL изображения записи.
*/
image: {
type: String
},
/**
* Имя записи.
*/
name: {
type: String
},
/**
* URL записи.
*/
url: {
type: String
}
}
);
_Schema.plugin(meta);
_Schema.plugin(utils);
return mongoose.model('Thing',_Schema);
};
module.exports = new Model();