Карта Уменьшить Диван Db - PullRequest
       14

Карта Уменьшить Диван Db

0 голосов
/ 12 октября 2011

У меня есть простая база данных с диваном дБ.У меня есть пользователи, у которых есть эти поля:

String userName
String password
String mail
boolean admin

Я держу своих пользователей на дБ.Однако я так новичок в Couch DB и NoSql.Как я могу реализовать на карте уменьшение с помощью примера (или он делает это внутренне, и мне ничего не нужно делать?)

Я использую Spring 3 и Ekorp для своего приложения.

Ответы [ 2 ]

1 голос
/ 21 августа 2012

Ваш вопрос мог бы использовать немного больше деталей, но, насколько я понимаю, вы хотите создать документ Couch DB, который действует как «таблица» пользователей.Для этого вам нужно будет создать JSON-документ в вашей Couch DB со следующими свойствами:

{
    type: "user",
    username: "John",
    password: "*****",
    mail: "blah, blah, blah",
    admin: true
}

Так же, как lukecampbell указывал выше, вам нужно будет создать собственное свойство "type" дляидентифицировать каждую сущность ... Например, вместо использования свойства администратора для идентификации пользователей с привилегиями, вы можете просто изменить свойство «type»:

{
    type: "admin"...
}

Для запроса базы данных и получения определенных документов,вам нужно будет использовать функцию карты.Опять же, пример lukecampbell предоставляет хорошую отправную точку:

function(doc){
    if(doc.type == "user"){ 
        emit(doc.name, doc);
    }
}

Этот «запрос» даст вам «представление» каждого документа «пользовательского» объекта, упорядоченного по «doc.name».Вот где красота Couch DB становится очевидной ... Функции отображения (и сокращения) в некотором смысле похожи на запросы SQL ... Но поскольку они написаны на JavaScript, вы можете использовать логику JavaScript для формирования базы данных:

function(doc){
     if(doc.type == "user" && doc.name == "John"){ 
         emit(doc.name, doc);
     }
}

Это даст вам представление о каждом «пользовательском» документе, где имя пользователя - Джон.Как вы можете видеть, в некоторых случаях написание запросов таким способом может быть гораздо более выразительным, чем SQL ... Можно даже «уткать» поля типа документа таким образом;

function(doc){
    if(
        doc.type == "user" && 
        typeof doc.admin == "boolean"
    ){ 
        emit(doc.name, "Is Admin?: " + JSON.stringify(doc.admin);
    }
}

Этот «запрос"должен распечатать имя каждого" пользователя "и небольшое сообщение о состоянии (" Является ли Admin ?: true (или false) ") для каждого пользовательского документа с логическим значением для свойства admin.Что касается функций "Reduce", они чрезвычайно полезны, но гораздо важнее сначала полностью понять функции карты, потому что они ОЧЕНЬ универсальны, и в большинстве случаев хорошо написанная функция карты избавит от необходимости писать функцию "Reduce"...

В Couch DB есть НАГРУЗКИ потенциала.Этот сайт, пожалуй, лучшее место для начала;http://guide.couchdb.org/index.html - Тем не менее, в этой технологии есть и очень странные причуды, которые иногда заставляют вас переосмыслить дизайн вашей базы данных ... Одна из этих причуд кратко обсуждается здесь (см. Ответ Виктора Николье):

Что-то не так с созданием представлений Couch DB с нулевыми значениями?

0 голосов
/ 04 февраля 2012

на диване, добавьте в ваши документы поле с именем

_type

или

type_

Функция карты может быть

function(doc) {
 if(doc.type_=="user") { 
   emit(doc.name,doc._id);
 }
}
...