Meteor如何允许客户端MongoDB查询更新服务器?

时间:2014-02-24 07:06:12

标签: javascript meteor

客户端如何能够在浏览器(客户端)上执行MongoDB查询,以及它如何自动更新到服务器端? DDP协议如何工作?

mongodb如何在客户端工作?

1 个答案:

答案 0 :(得分:4)

Meteor在名为Minimongo的客户端中运行仅限JavaScript的Mongo版本。它使用 DDP 协议将结果发送回服务器,如果allow/deny规则允许,服务器又将其写入底层MongoDB。您可以在http://docs.meteor.com了解更多有关Minimong,DDP和反应性的信息。

  

Minimongo本质上是纯JavaScript中Mongo的内存中非持久性实现。它充当本地缓存,仅存储此客户端正在使用的数据库的子集。客户端(查找)上的查询直接从此缓存中提供,而无需与服务器通信。

Quora answer from the Meteor CEO解释了Minimongo如何运作:

  

嗨,我写了(第一个版本)Minimongo :)是的,它只使用JavaScript对象来表示Mongo文档,我重新实现了Mongo查询并更新了JavaScript中的$ -operators(除了少数例外,如docs。)困难的部分是弄清楚运算符的确切语义,因为10gen文档没有详细介绍边缘情况。所以我保持一个Mongo shell打开,并弄清楚mongod如何处理每个边缘情况,然后写一个minimongo单元测试,以确保它做同样的事情。

     

除了10gen原语之外,它还有代码来保存针对数据库的实时查询列表(Meteor的observe()API)并发送添加/删除/移动/更改消息以使查询保持最新。这相当于在对象发生变化时检查实时查询列表。

     

[...]

     

还有一些代码用于执行数据库快照和恢复,用于实现延迟补偿(分叉数据库以在本地应用预测的更改,然后将其回滚并将其替换为来自服务器的官方结果)到达。)