Meteor с настоящей mongodb

Не секрет, что я очень люблю метеор. Идеально для быстрой разработки и прототипов.

В этой статье хочу поделиться некоторыми аспектами работы Метеора через MongoDb с другими программами.

По умолчанию в MongoDb для идентификации используются специальные объекты ObjectId. Метеор же по умолчанию использует строчки.

Хотя информации в сети по работе в метеоре с нативными Id MongoDb не так много, мне удалось это сделать.

Первым делом у всех коллекций нужно выставить правильный idGeneration

@Price = new Meteor.Collection('price', idGeneration: 'MONGO')

Я при разработке использую iron-router и autoform практически всегда.

К сожалению с применением mongoId часть красоты уходит:

Router.route '/price/:_id',
  template: 'priceShow'
  name: 'price.show'
  data: ->
    Price.findOne(new Meteor.Collection.ObjectID @params._id)
  waitOn: ->
    [
      Meteor.subscribe('price_one', new Meteor.Collection.ObjectID @params._id)
    ]

Передача Id в iron-router теперь делается так

    Router.go 'price.show',
      _id: @docId.toHexString()

В шаблоне

    <a href="{{pathFor 'price.show' _id=this._id.toHexString}}">

В Автоформах (autoform и simpleschema) я нужно приводить строчку к объекту

@PriceUploadSchema = new SimpleSchema
  company:
    type: Meteor.Collection.ObjectID
    label: 'Компания'
    autoform:
      type: 'select2'
      options: ->
        Company.find({}).map (el) ->
          label: el.title
          #id - сейчас пишется как строчка - нужно перекодировать в ObjectID в форме
          value: el._id.toHexString()

Но к сожалению большинство контролов не будут работать с ObjectId  и его приходится переоводить в строчку, а в форме обратно в ObjectId

AutoForm.addHooks 'insertForm',
  formToDoc: (doc) ->
    if doc.company
      doc.company = new Meteor.Collection.ObjectID doc.company
    doc

  docToForm: (doc) ->
    if doc.company
      doc.company = doc.company.toHexString()
    return doc

В подписках и запросах ничего править не надо — там идет работа с ObjectID.

Об авторе СИльвестр

Настоящий увлеченный программист. В отличие от КаЧе, он интересуется только софтом (программированием) «на чем» и «зачем» эти вопросы мало волнуют СИльвестра. СИльвестр является дипломированным специалистом в области программирования. Как и большинство программистов СИльвестр недолюбливает КаЧе за его «не-олд-скульность». Это не мешает ему и Каче входить в «совет по высоким технологиям сайта ivan133.ru»
Запись опубликована в рубрике Веб, Программирование с метками , . Добавьте в закладки постоянную ссылку.