【问题标题】:How does mongodb create database/collection on the flymongodb 如何动态创建数据库/集合
【发布时间】:2015-01-21 09:55:15
【问题描述】:

如果我们运行类似于

的代码,Mongodb 足以快速创建数据库/集合
db.store.save({a: 789});

它会自动创建store 集合并向其中添加一个文档。

我的 javascript 理解表明,不可能在 db 对象的未定义属性上调用方法。它应该导致某种错误/异常。

我很想了解幕后发生的事情,如果有任何有用的链接,请指出我。谷歌搜索对我没有多大帮助。

【问题讨论】:

  • 虽然我不知道这个问题的答案,但我相信 MongoDB 是用 C++ 开发的。您在 Javascript 中使用的是驱动程序,这些驱动程序是用它应该使用的语言开发的(如果我弄错了,请纠正我)。但问题仍然存在,我只是认为注意这一点会很有用。
  • Mongo 是open source,所以你可以在aforementioned JS driver 中挖掘(如果你有时间的话)看看你能不能弄明白 =)

标签: javascript mongodb


【解决方案1】:

在 JavaScript 中,有一种方法可以定义一个函数,该函数将在调用未定义的方法时执行。

例子:

var o = {
  __noSuchMethod__: function(id, args) { console.log(id, '(' + args.join(', ') + ')'); }
};

o.foo(1, 2, 3);
o.bar(4, 5);
o.baz();

// Output
// foo (1, 2, 3)
// bar (4, 5)
// baz ()

请注意,这是一项非标准功能,目前仅适用于 Firefox。

我不知道 MongoDB 是如何实现这个功能的,但我只是为了报告可以通过这种方式完成。

更多详情见:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/noSuchMethod

【讨论】:

【解决方案2】:

我记得在 NodeJS 环境中,您必须执行以下操作才能实际创建记录:db.get('collectionName').insert({..something...});db.get('collectionName').save({...something...});,但您不能将集合名称用作 db 的属性。

您提到的行仅在 MongoDB shell 中使用,而不是 Javascript。 我猜你误解了什么是 MongoDB shell 和什么是 MongoDB 驱动程序。

长话短说,MongoDB(驱动程序)无法访问未定义的属性。

编辑

回应您的评论..

MongoDB JS 驱动程序的 GitHub 页面几乎指出了如何插入字段并始终使用我提到的语法:https://github.com/mongodb/node-mongodb-native

至于您在 shell 中使用的内容,很明显您不能只在命令 shell 中使用 Javascript。所以我想我会给你指出一个地方,你可以在其中看到 MongoDB 是用什么语言开发的:http://www.mongodb.org/ 几乎第一行说它是用 C++ 编写的。

希望这有助于澄清您的问题

【讨论】:

  • 是的,答案似乎是您对我的问题的评论的延伸。非常感谢。如果可能的话,请您参考我引用的任何链接。
  • 是的,这有帮助..谢谢。
猜你喜欢
  • 2021-07-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多