1

在我的项目中,我正在使用需要集合名称来在集合中进行一些搜索的包。我刚刚迁移到 Meteor 1.3,现在这个包不起作用。

在代码包中使用类似:

const search = (collection_name) => {
   let collection = this[collection_name]
   ...
}

现在集合不再在全球范围内。global[collection_name] = Collection我可以在我的 中添加我的收藏lib/collections.js,但我更愿意修复包以使其更灵活并且与 Meteor 1.3 兼容。

如果您只知道集合名称,是否有可能获得 Mongo Collection?

4

4 回答 4

1

我建议不要使用阿基米德建议的可能会在没有通知的情况下更改的私有 api,而是创建一个全局对象来保存您的集合。流星文档特别指出:

Generally, you'll assign Mongo.Collection objects in your app to global variables. You can only create one Mongo.Collection object for each underlying Mongo collection.

因此,如果您有一个Collections全局的,您可以通过 轻松访问有问题的集合Collections[name]。当然你确实想限制你的全局变量,所以如果你当前有一个全局变量用于你的应用程序,只需给它一个属性来保存你的集合。以下是您可以适应您的需求的常见模式,无论您的集合位于单个文件中还是单独的文件中。

app = app || {};
app.collections = {
    // collections here
}
于 2016-05-13T02:07:07.417 回答
1

感谢@sashko 的推荐,我查看了 https://github.com/dburles/mongo-collection-instances,然后lai:collection-extensions查看了我的解决方法:

import { CollectionExtensions } from 'meteor/lai:collection-extensions'

let registered_collections = {}
CollectionExtensions.addExtension(function (name, options) {
  registered_collections[name] = {
    name: name,
    instance: this,
    options: options
  };
});

export function getCollectionByName(collecion_name) {
    return registered_collections[collecion_name].instance
}
于 2016-05-13T12:04:31.020 回答
0

使用以下技术

Meteor.default_connection._mongo_livedata_collections.users.find({}).fetch()

只需将用户替换为您拥有的任何集合。

https://forums.meteor.com/t/es6-global-collection-variables/22392/2?u=trajano

于 2016-05-13T00:29:58.863 回答
0

试试这个魔法(在客户端代码中):

Meteor.connection._stores['tasks']._getCollection()

欲了解更多信息结帐:

流星/流星#5845(2015 年 12 月首次尝试)

流星/流星#6160(2016 年 2 月修复)

或者,如果您更喜欢公共 API 并且不介意另一个mongo-collection-instances答案中提到的另一个依赖项使用。

于 2016-06-22T09:04:36.627 回答