2015-08-05 2 views
0

Я использую адаптер хранения Amazon S3 с CollectionFS.Как документы в CollectionFS могут хранить методы в MongoDB?

Обычно вы не можете сохранить метод в MongoDB. Например, я не могу иметь документ, хранящийся в моей коллекции CustomerOrders, с помощью метода, который изменяет документ напрямую с помощью кода скидки.

CustomerOrders.findOne().addDiscountCode('SAVE50PERCENT')

Но с CollectionFS и адаптером для хранения S3 я могу запустить remove функции, чтобы удалить элемент из моей коллекции изображений, а также удалить его из моего Amazon S3 ведра:

Images.findOne().remove(function(error, success){ 
    console.log(success) 
}); 

Сходство в синтаксисе поразило меня. Это в основном говорят:

  • Перейти в коллекцию изображений
  • найти случайную документ
  • возвращает его как объект
  • запустить метод .remove(), что это находится на этом объекте

Однако, на самом деле объявление коллекции отличается.

Вместо того, чтобы делать следующее, чтобы создать свою коллекцию Images,

Images = new Mongo.Collection('images');

я должен сделать:

Images = new FS.Collection("images", { 
    stores: [storeName], 
    filter: { 
    allow: { 
     contentTypes: ['image/*'] 
    } 
    } 
}) 

Я предполагаю, что FS.Collection расширенный Mongo.Collection'sfindOne() метод так что код может :

  • Перейти в коллекцию изображений
  • найти случайный документ
  • возвращение его как объект
  • добавить метод .remove() на этот объект
  • возвратного этот протяженный объект
  • запустить метод .remove(), что это находится на этом объекте

Является ли это правильным? Метод .remove фактически не хранится в самом документе. Он просто добавлен в объект документа, который возвращается в findOne()?

ответ

0

Метод удаления происходит из прототипа в пакете FS Collection (который расширяет возможности типичного набора и изменяет поведение по умолчанию), поэтому вы правы. Если вы посмотрите на пакет cfs: collection и api.common.js, вы можете точно определить, как эти методы определены: api.common.js