2015-01-21 31 views
11

MongoDB是不夠冷靜,動態創建數據庫/集,如果我們運行類似如何MongoDB的對飛

db.store.save({a: 789}); 

代碼它會自動創建store收集和添加文檔創建數據庫/集合到它。

我的JavaScript理解說,不可能調用對象的未定義屬性的方法。它應該導致某種錯誤/異常。

我很想知道幕後發生的事情,如果有任何有用的鏈接,請將我指向那些。谷歌搜索沒有多大幫助。

+1

儘管我不知道這個問題的答案,我相信MongoDB是用C++開發的。你在JavaScript中使用的是驅動程序,這些驅動程序是用它應該使用的語言開發的(如果我錯了,有人會糾正我)。這個問題依然存在,我只是認爲這很有用。 – lascort 2015-01-21 14:35:29

+0

Mongo是[開源](https://github.com/mongodb),所以你可以在[上述JS驅動程序](https://github.com/mongodb/node-mongodb-native)中挖掘(if你有時間)看看你是否能算出來=) – jadarnel27 2015-01-21 14:57:49

回答

2

正如我在一個環境的NodeJS記得你必須做這樣的事情居然創造了紀錄:db.get('collectionName').insert({..something...});db.get('collectionName').save({...something...});但你沒有得到使用集合名稱作爲屬性的分貝。

你提到的這行只在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++編寫的。

希望這有助於澄清你的問題

+0

是的,答案似乎是你對我的問題的評論的延伸。非常感謝。 如果可能的話,請你向我推薦任何鏈接引用相同。 – dopeddude 2015-01-23 11:22:38

+0

@DopedDude檢查編輯 – lascort 2015-01-23 11:48:49

+0

是的,這有助於..謝謝。 – dopeddude 2015-01-27 07:01:11

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() 

注意這是一個非標準的功能,如今只有在Firefox的作​​品。

我不知道MongoDB是如何實現這個功能的,但我只是在迴應,以便報告可以這樣做。

Fot的更多詳細信息,請參閱:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/noSuchMethod

+2

僅供參考,MongoDB 2.4+使用[V8 JavaScript引擎](http://docs.mongodb。組織/手動/釋放香/ 2.4的JavaScript /)。 – Stennie 2015-01-22 15:30:59