我正在使用 mongo 聚合管道結果。我需要將 Decimal128 值轉換為數字。例如
amount: { $numberDecimal: '200' } <-- dont want
amount: 200 // <-- desired format
棘手的部分是我想遞回檢查每個屬性,并且只有當它是小數時,然后將其更改為數字。所以我的問題是,確定 bson 物件是否為 NumberDecimal 的最佳方法是什么?我能夠通過第一次呼叫來實作這一點
JSON.parse(JSON.stringify(object))
// Before parsing:
// Decimal128 {_bsontype: 'Decimal128', bytes: <Buffer 00 00 00 00 00 00 00 00 00 00 00 00 00 00 3c 30> }
// After parsing:
// amount: { $numberDecimal: '200' }
然后檢查每個物件是否具有$numberDecimal屬性,如果有,則呼叫Number()該值。總的來說,這似乎是實作這一目標的一種迂回方式。
有沒有更好的方法不涉及決議物件并查找 $numberDecimal 鍵;我希望我能夠做一些事情,比如檢查 bson 物件的 typeof 或 instanceof,但它只是object:(
這是我的函式(有效),但我覺得必須有比檢查 $numberDecimal 鍵更好的方法。
const recursivelyMutateNumDec = (object) => {
const jsonObj = JSON.parse(JSON.stringify(object));
for (const k in (jsonObj)) {
if (typeof jsonObj[k] === 'object' && jsonObj[k] !== null) {
if (jsonObj[k]?.$numberDecimal) {
// eslint-disable-next-line no-param-reassign
jsonObj[k] = Number(object[k]);
} else recursivelyMutateNumDec(jsonObj[k]);
}
}
return jsonObj;
};
感謝任何見解/建議!
uj5u.com熱心網友回復:
Decimal128是 BSON 型別。如果你匯入它:
const { Decimal128 } = require('bson');
您可以檢查代碼中的型別,如下所示:
if (object[k] instanceof Decimal128) {
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/410191.html
標籤:
上一篇:在子物件陣列中包含父欄位
