0

我将 Amazon S3 存储适配器与 CollectionFS 一起使用。

通常,您不能将方法存储到 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's findOne()方法,所以代码可以:

  • 进入图像集合
  • 找到一个随机文档
  • 将其作为对象返回
  • .remove()在这个对象上添加一个方法
  • 返回这个扩展对象
  • 运行该.remove()对象上的方法

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

4

1 回答 1

0

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

于 2015-08-05T08:23:34.773 回答