Как назвать конкретные поля приложения в couchdb - PullRequest
2 голосов
/ 07 мая 2010

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

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

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

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

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

1 Ответ

2 голосов
/ 08 мая 2010

Вы правы. В 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
        }
      }
    }
    

Удачи!

...