Meteor中的MongoDB集合

Web应用以提供其用户一个视图、一个修改信息的方式、一组持久的数据为其核心。无论是管理你的todo,或者预定一辆来接你的车,你都将与不断变化的数据层打交道。

在Meteor的世界,数据通常存放在MongoDB里。一组关联的数据归类为“集合”。你可以在Meteor里通过集合来链接MongoDB,并用它们来为你的数据提供持久化的机制。

然而,集合不仅只有一种方式来保存和检索数据。还提供了交互式的核心,使线上用户获得最好的应用体验。Meteor使这种体验轻而易举地付诸实施。

本文中,我们将仔细的观察集合如何在框架中的各处进行工作,以及如何去获取它们。

在服务端使用集合

首先让我们服务端创建一个集合:

Todos = new Mongo.Collection('Todos');

此时MongoDB中正创建一个集合,以及它的服务端接口。它是一个由Node MongoDB来驱动的相当简单的层,并且拥有同步的API:

// 异步完成插入数据的操作
Todos.insert({_id: 'my-todo'});
// 同步返回查询结果
const todo = Todos.findOne({_id: 'my-todo'});
// 然后并没有任何回调结果!
console.log(todo);

在客户端使用集合

在客户端中,我们编写了同样的代码:

Todos = new Mongo.Collection('Todos');

但结果却是完完全全的不同了!

我们来看一下,在客户端中并没有直接链接MongoDB数据库,事实上同步的API接口无法工作(别太天真了!)。其实客户端的集合看起来更像数据库在客户端的一个缓存。要完成这些,还得感谢一下Minimongo——它是一个存储在内存中的,完全由JS驱动的MongoDB API。这也意味着,当你写入数据的时候,它就存在于客户端中:

// 首先我们插入一条数据到内存中的Minimongo
Todos.insert({_id: 'my-todo'});
// 然后查询一下刚插入的数据
const todo = Todos.findOne({_id: 'my-todo'});
// 我去!这家伙竟然成功执行了!?
console.log(todo);

这里有关于数据加载的专题描述从服务端集合(及MongoDB的后端)推送数据至客户端集合(内存中)的方法。一般来讲,当你订阅(Subscribe)一个发布(Publication)时,它会把数据从服务端推送到客户端。你通常可以假定客户端包含一个最新且完整的MongoDB子集的副本。

你可以使用一个方法来写回数据至服务器,这里有关于方法(Methods)的专题。

本地的集合

这里有第三种方式来使用Meteor中的集合。你可以客户端或者服务端使用null来命名一个新创建的集合:

SelectedTodos = new Mongo.Collection(null);

此时实际上是创建了一个本地集合。这是一个没有数据库连接的集合(通常一个被命名的集合要么是直接连接到数据库服务器上,要么通过客户端订阅)。

本地集合是一种便利的方法来针对内存中的存储使用Minimongo库的全部功效。举个例子,如果你需要针对你的数据执行复杂的查询,你可以使用本地集合来替代一个简单的数组。又或者你会想利用它的反应性在客户端驱动一些UI,不过这在Meteor中不是事儿。

results matching ""

    No results matching ""