Как назвать поля приложения в CouchDB

Я попытался добавить в документы свои собственные поля с именами вроде _myappvar и _myotherappvar, чтобы отличать их от полей данных. Сначала это работало, но в какой-то момент футон начал жаловаться.

Каков правильный путь?

Я использую CouchDB 0.9.0, возможно, она устарела, но я не смогу обновить ее в этой итерации.

Редактировать: я думаю, _* зарезервировано для переменных CouchDB. Я мог бы выбрать что-то другое, но есть ли лучшая практика или вы решаете это?

Edit2: это несколько серьезно для моего приложения, потому что оно уже работает с этими полями. Интересно, при каких обстоятельствах я могу сохранить те части, которые работают, и применять новые имена только для будущих полей.


person user89021    schedule 07.05.2010    source источник


Ответы (1)


Ты прав. Это объясняется в разделе CouchDB Document API, специальные поля.

Поля верхнего уровня не могут начинаться с _.

CouchDB расслаблен, поэтому лучший способ — это самый простой способ для вашего приложения. О ваших конкретных изменениях:

  1. Одна из идей — использовать суффикс _ вместо префикса. Другая идея - поле .myapp, которое является объектом (пространством имен) для ваших внутренних данных. Вы также можете объединить их:

    {
      "type": "the document type",
      "var1": "Normal variable 1",
      "var2": true,
      "myapp_": {
        "var": "Something internal",
        "othervar": null,
      }
    }
    

    Теперь вы можете ссылаться на doc.myapp_.var в своих картах просмотра, уменьшении и т. д.

  2. У тебя есть выбор. Вы можете стиснуть зубы и поменять все документы прямо сейчас. Я не знаю ваше приложение, но предпочитаю его, потому что вы играете с огнем, используя префикс _.

    Однако вы также можете иметь оба типа документов и просто научить свою функцию map() работать с ними обоими.

    function(doc) {
      if(doc.type == "the document type") {
        if(doc._myappvar) {
          emit(doc._id, doc._myappvar); // The old way
        } else if(doc.myapp_) {
          emit(doc._id, doc.myapp_.var); // The new way
        }
      }
    }
    

Удачи!

person JasonSmith    schedule 08.05.2010