CollectionFS中的文档如何在MongoDB中存储方法?

时间:2015-08-05 05:23:19

标签: meteor collectionfs

我正在使用带有CollectionFS的Amazon S3存储适配器。

通常,您无法将方法存储到MongoDB中。例如,我无法在我的CustomerOrders集合中存储一个文档,并在其上使用折扣代码直接修改文档。

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

但是使用CollectionFS和S3存储适配器,我能够运行remove函数从我的Images集合中删除一个项目,并从我的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's findOne()方法,因此代码可以:

  • 进入图片集
  • 找一份随机文件
  • 将其作为对象返回
  • 在此对象上添加.remove()方法
  • 返回此扩展对象
  • 运行该对象上的.remove()方法

这是正确的吗? .remove方法实际上并未存储在文档本身中。它只是添加到findOne()中返回的文档对象中?

1 个答案:

答案 0 :(得分:0)

remove方法来自FS Collection包中的原型(扩展了典型的收集功能并修改了默认行为),所以你是对的。 如果你看一下cfs:collection包和api.common.js,你可以看到这些方法是如何定义的: api.common.js