В настоящее время я пытаюсь выяснить, подходит ли CouchDB для моего прецедента, и если да, то каким образом. У меня есть ситуации, подобные следующему:Несколько соединений в CouchDB
Первого набора документов (назовем их компанию):
{
"_id" : 1,
"name" : "Foo"
}
{
"_id" : 2,
"name" : "Bar"
}
{
"_id" : 3,
"name" : "Baz"
}
Второго набор документов (давайте называть их проекты):
{
"_id" : 4,
"name" : "FooProject1",
"company" : 1
}
{
"_id" : 5,
"name" : "FooProject2",
"company" : 1
}
...
{
"_id" : 100,
"name" : "BazProject2",
"company" : 3
}
Третьими набор документов (назовем их инцидентами):
{
"_id" : "300",
"project" : 4,
"description" : "...",
"cost" : 200
}
{
"_id" : "301",
"project" : 4,
"description" : "...",
"cost" : 400
}
{
"_id" : "302",
"project" : 4,
"description" : "...",
"cost" : 500
}
...
Итак, короче каждая компания ha много проектов, и каждый проект может иметь несколько инцидентов. Одной из причин, по которым я моделирую данные, является то, что я прихожу в основном из фона SQL, поэтому моделирование может быть совершенно неподходящим. Вторая причина заключается в том, что я хотел бы добавить новые инциденты очень легко, просто используя REST-API, предоставленный couchdb. Таким образом, инциденты должны быть едиными документами.
Однако теперь я хотел бы получить представление, которое позволит мне рассчитать общую стоимость для каждой компании. Я могу легко определить представление, используя map-reduce и связанные документы, которые получают мне общую сумму за проект. Однако, как только я нахожусь на уровне проекта, я не могу дойти до уровня компании.
Возможно ли это вообще с помощью couchDb? Такие обобщающие данные звучат как идеальный вариант использования для уменьшения карты. В SQL я бы просто сделал соединение из трех таблиц, но похоже, что в couchDb лучшее, что я могу получить, - это соединения из двух таблиц.
Вы не можете (или, по крайней мере, не должны) делать какие-либо соединения в CouchDB. Вы можете использовать функции списка, чтобы объединить соседние строки (сортировка), но все остальное будет разрушать вашу производительность. – OrangeDog