У меня есть следующая общая схема для представления различных типов информации.
var Record = new Schema (
{
type: {type: String}, // any string (foo, bar, foobar)
value: {type: String}, // any string value
o_id: {type:String}
}
);
Некоторые записи, основанные на этой схеме, имеют:
- type = "car"
- value = "ferrari" или
- value = "ford"
Некоторые записи имеют тип "topspeed" со значением "210", но они всегда имеют o_id (например,связанный "у Ferrari есть эта скорость").Так что, если «ferrari имеет максимальную скорость 300», тогда обе записи имеют одинаковый o_id.
Как мне сделать запрос, чтобы найти «ferrari with topspeed 300», когда я не знаю o_id?
Единственное решение, которое я нашел, - это сначала выбрать автомобили "ferrari", а затем, зная все o_id для всех "ferrari", использовать его для определения максимальной скорости.
В псевдокоде:
Record.find({type:"car", value:"ferrari"}, function(err, docs)
{
var condition = [];// create array of all found o_id;
Record.find({type:"topspeed", value:"300"}...
}
Я знаю, что некоторые слияния или объединения могут быть невозможны, но как насчет объединения этих условий во избежание рекурсии?
РЕДАКТИРОВАТЬ: Лучший пример:
Предположим, у меня есть HTML-документ, который содержит элементы DIV с определенным идентификатором (o_id).
Теперь каждый элемент div может содержать различные типы элементов микроданных (Car, Animal ...).
Каждый элемент микроданных имеет различные свойства ("topspeed", "numberOfLegs" ...) в зависимости от типа (Автомобиль имеет максимальную скорость, число животныхOfLegs)
Каждое свойство имеет какое-то значение (310 км / ч, 4 ноги)
Теперь я сохраняю эти элементы микроданных в базе данных, но в общем, независимо от типаи значения, которые они содержат, так как пользователь может определять собственные схемы от Car до Animal (почти все).Для этого я определил схему записи: тип состоит из «itemtype_propertyname», а значение - это значение свойства.
В конечном итоге я бы хотел запросить "Дайте мне o_id всех элементов DIV, которые содержат элемент Ferrari
и элемент Dog
" одновременно.
Причина этогоОбщий подход заключается в том, чтобы предоставить кому-либо возможность определять собственную схему и соответствующий синтаксический анализатор, в котором хранятся значения.
Но у меня будет только одна поисковая система, которая найдет все различные схемы и комбинации значений, которые будут обрабатывать все возможныесхемы как единое определение.