不管你信不信,它可以存儲一個 「活」 的Javascript功能在MongoDB的集合:
> db.collection.insert({ name: "add1", f: (function(x) { return x + 1 }) })
WriteResult({ "nInserted" : 1 })
> db.collection.findOne({ name: "add1" }).f(123)
124
A 「與閉合功能」(或者更簡單地說,一個 「封閉」)是功能,其指的是存在該功能以外的變量,就像incrementX
在下面的代碼片斷:
var x = 1;
function incrementX() { x++; }
這些功能可以被存儲在採集的MongoDB以及;他們在執行時,他們會結合蒙戈會話的範圍:
> db.collection.insert({
name: "incrementX",
f: (function() { x++; })
})
WriteResult({ "nInserted" : 1 })
> var x = 123;
> db.collection.findOne({ name: "incrementX" }).f()
> x
124
出於某種不可知的原因,BSON設計者決定,這取決於它們是否任何變量關閉了使用Javascript的功能,不同的數據類型或不。簡單的「Javascript」類型用於不關閉任何變量的函數,並且「Javascript(with scope)」用於關閉。
爲什麼要在MongoDB集合中存儲Javascript函數是一個很好的問題。我不確定此功能的用途是什麼;它誠實地似乎相當危險和不適合我。特別是,如果您使用的是非Javascript語言的Mongo驅動程序,那麼對它們做任何有用的操作都很困難,並且如果惡意用戶能夠注入函數,則使用數據庫中的函數會使您暴露於潛在的漏洞攻擊到你的數據庫中。如果我是你,我會假裝這個功能不存在,繼續前進。
可能重複[什麼是類型的JavaScript/javascriptwithscope的bson](http://stackoverflow.com/questions/37941368/what-is-the-use-of-type-javascript-javascriptwithscope-of- bson) –
@EvanTrimboli我發現,當查找重複也。答案根本沒有幫助。 – 4castle