Meteor:在不同的文件中使用它时临时保存本地集合

Posted

技术标签:

【中文标题】Meteor:在不同的文件中使用它时临时保存本地集合【英文标题】:Meteor: Temporally persist local collection when using it in different files 【发布时间】:2019-09-04 08:17:24 【问题描述】:

我在自定义路由上创建了一个文件,将用于本地集合。

此文件位于 imports/localDb/ 下,名为 patients.js

import  Mongo  from 'meteor/mongo';

const PatientsLocal = new Mongo.Collection();

export default PatientsLocal;

我正在做的是每次需要执行操作(插入、提取、...)时导入此文件

例如,我在一个文件中:

import PatientsLocal from '../../../localDb/patients';

// ...

PatientsLocal.insert(patient);

问题是:

当我必须进行操作时,我会导入 patients.js 文件,因此该文件会再次完全运行,并且该集合会再次实例化,因此我无法在一个文件中插入对象并在另一个上获取它。

我可以做些什么来在运行时持久化集合以实现我的需要?

【问题讨论】:

【参考方案1】:

将其导出为 const 应该没问题:

export const PatientsLocal = new Mongo.Collection();

但是,还有更多需要考虑:该模块包含定义和实例化代码。一个好的做法是将实例化与定义分离。

一种可能的解决方法是导出一种包含多个静态属性的上下文对象,这些静态属性定义了整个Patients 上下文,并在启动时使用必须实例化的属性来装饰它:

imports/local/patients.js

export const Patients = 
  name: 'patients',
  collection: null,
  // other definitions...

然后在您的启动代码中实例化集合一次

client/main.js

import  Patients  from '../imports/local/patients'
Patients.collection = new Mongo.Collection()

(请注意,这可以移动到自己的启动模块文件中)

在你的运行时代码中你导入上下文而不是集合:

import  Patients  from '../../../local/patients'

// ...

Patients.collection.insert(patient)

请注意,这些只是解决此问题的几个示例。其他可能包括使用global 命名空间(不鼓励但不禁止)或某种跟踪集合的所有实例的注册表类(如dburles:mongo-collection-instances,这是一个很棒的包,但通过name 访问集合这未在本地集合中定义)。

【讨论】:

以上是关于Meteor:在不同的文件中使用它时临时保存本地集合的主要内容,如果未能解决你的问题,请参考以下文章

处理用户输入与显示数据------------(创建本地临时文件在/temp中创建临时文件创建临时目录tee命令)

Spark_临时创建原因

无法使用 Meteor 和 React 获取用户注册的 rif

保存的随机森林模型在同一数据集上产生不同的结果

如何将单个结果集从返回多个集的 SQL 存储过程保存到临时表?

SQL存储过程多个结果到临时表中