MongoDB Shell 支持 map.set()
我正在嘗試使用 MongoDB shell 來執行一些腳本。
var map = new Map()
在我嘗試執行的 JavaScript 內部map.set(1,1)
。但是,我收到以下錯誤:
E QUERY [js] TypeError: map.set is not a function :
我正在執行這個
mongo
shell 版本:MongoDB shell version v4.2.1
mongo
shell不支持這個功能map.set()
嗎?
不,他們在implscope.cpp中隱藏了標準實現
// 這個內置地圖是 javascript 6 的東西。我們想要我們的版本。所以//把他們的拿出來
並在types.js中實現一個新的。
好吧,您可以解決方法:
Map.prototype.set = Map.prototype.put
MongoDB shell 目前實現了自己的自定義
Map
類型,而不是 ECMAScript 6Map
類型。在不同之處中,MongoDB 類型使用put
而不是set
向地圖添加元素。這解釋了為什麼您會看到“map.set 不是函式”錯誤。此自定義地圖類型的三個 API 函式是“get”、“put”和“values”。
> new Map(); { "_data" : { }, "put" : function(key, value) { var o = this._get(key); var old = o.value; o.value = value; return old; }, "get" : function(key) { return this._get(key).value; }, "_get" : function(key) { var h = Map.hash(key); var a = this._data[h]; if (!a) { a = []; this._data[h] = a; } for (var i = 0; i < a.length; i++) { if (friendlyEqual(key, a[i].key)) { return a[i]; } } var o = {key: key, value: null}; a.push(o); return o; }, "values" : function() { var all = []; for (var k in this._data) { this._data[k].forEach(function(z) { all.push(z.value); }); } return all; } }
MongoDB 問題SERVER-46243於 2020 年 2 月創建,並建議改用標準 ECMAScript
Map
類型。實施此更改後,您目前的程式碼將起作用。總之,如果您更改
set
為,您的範常式式碼應該按原樣工作put
:var map = new Map(); map.put(1, 1);
mongosh
請注意,這在新的MongoDB Shell(目前處於 Beta 版)中不再是問題,因為它使用標準的 ECMAScript 6Map
類型。2021 年 4 月對上述票證的評論中提到了這一點:此功能在我們的新 MongoDB Shell (
mongosh
)中可用$$ … $$.
mongosh
仍處於測試階段,但它應該具有您需要的大部分功能。$$ … $$我們正準備在今年晚些時候進行 GA$$ … $$.