mongodb如何动态创建数据库/集合

dop*_*ude 11 javascript mongodb

如果我们运行类似的代码,Mongodb足够酷,可以动态创建数据库/集合

db.store.save({a: 789});
Run Code Online (Sandbox Code Playgroud)

它会自动创建store集合并向其添加文档.

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

我很想知道幕后发生的事情,如果有任何有用的链接,请指出我.谷歌搜索并没有帮助我.

Leo*_*ino 5

在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 ()
Run Code Online (Sandbox Code Playgroud)

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

我不知道MongoDB是如何实现这个功能的,但我只是回应以便报告可以这样做.

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

  • 仅供参考,MongoDB 2.4+使用[V8 JavaScript引擎](http://docs.mongodb.org/manual/release-notes/2.4-javascript/). (2认同)

mar*_*ins 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++ 编写的。

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