【问题标题】:Why does Meteor use EJSON and not BSON directly?为什么 Meteor 直接使用 EJSON 而不是 BSON?
【发布时间】:2014-07-08 10:19:10
【问题描述】:

据我了解,Node.js 支持 BSON(不确定是原生还是带有 npm 包)。然而,Meteor 发明了一种新的 EJSON(增强型 JSON),但我看不出它带来了哪些优势,以及它比直接使用 BSON 更好。

有谁知道 EJSON 相对于 BSON 的优势是什么,或者当已经有可用的 JSON 和 BSON 时需要 EJSON 的原因是什么?

【问题讨论】:

  • 好奇,你确定EJSON中的EEnhanced的缩写吗?
  • 不,不确定。可能它代表 Extended JSON 而不是 Enhanced,但是官方文档从来没有解决这个首字母缩略词......因为我仍然错过了一些关于 E 确切含义的权威声明,所以我现在就留下这样的问题。
  • 我也找不到答案,所以希望你能帮我解决。好吧,一年的等待浪费了:'(但是谢谢!

标签: javascript mongodb meteor bson


【解决方案1】:

好吧,BSON 并没有消失,它实际上仍然存在。 Meteor MongoDB 驱动程序部分构建在 native node driver for MongoDB 之上,当然它使用 BSON 与 MongoDB 进行实际对话,而且没有其他方法,因为可以说这是 MongoDB 所说的语言。

AFAIK,EJSON 的重点是在翻译为只理解 JavaScript 并因此理解 JSON 的客户端时,通过它的二进制定义保持 BSON 中固有的相同类型的“类型保真度”。所以主要是浏览器。

因此,Meteor 目标的一部分是使客户端和服务器端代码之间的差异有些透明,它需要一种机制来维护这种“类型保真度”,对于DatesObjectId 等,在将数据传输到和来自客户端和服务器。

因此,EJSON 和 JSON 的区别在于,生成的 JSON 包含标识这些“类型”的特殊键,因此可以以这种方式正确处理它们,尤其是在与服务器进程通信时。

【讨论】:

  • 那么我们需要EJSON的原因是因为浏览器只会说JSON,但他们不懂BSON?
  • @Stephan 基本上是的。 BSON 是 JSON 的二进制表示,浏览器使用 JavaScript(一致同意)所以当我谈论“类型保真度”时,这里的概念类似于:{ "_id": { "$oid": "537aa577e90c3db84958aa8b" } } 然后有一些东西可以确定类型。例如,Java 和 C# 有不同的解释。 JavaScript(不是严格类型化的)有不同的解释。所以你“哄”它。或者给一些东西传递给知道更多的服务器。清楚知道吗?
  • 谢谢,现在很清楚了。当试图以一种简单明了的方式理解这一切时,它会变得有点复杂,但你的回答肯定会带来很多启示:-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-06-25
  • 1970-01-01
  • 2020-04-24
  • 2013-07-09
  • 2011-05-22
  • 2013-08-15
  • 1970-01-01
相关资源
最近更新 更多