在數字模型,用於存儲貨幣值,所述MongoDB docs狀態:提取小數與蒙哥(OSE)
從蒙戈殼十進制值被分配,並使用NumberDecimal()構造查詢。
同樣,使用Morphia Java庫時,BigDecimals會自動插入爲BigDecimals。
我用Mongoose在Node中查詢Mongo,並試圖提取存儲爲NumberDecimal的字段的數值。然而,該值奇怪的包裹在查詢結果中,我不知道如何提取它通過蒙戈或貓鼬:
[
{
"openValue":{
"$numberDecimal":"119.931"
},
"timestamp":"2017-01-20T10:30:00.000Z"
},
{
"openValue":{
"$numberDecimal":"119.965"
},
"timestamp":"2017-01-20T10:31:00.000Z"
}
]
一個崗位在我的應用程序代碼中我讀到使用parseFloat()
表示將執行什麼我的願望,但是迭代結果以執行此轉換效率不高。避免迭代和轉換意味着每次我想要它們的值時都會在NumberDecimals上運行該函數,這很煩人。
有沒有一種方法可以使用Mongo或Mongoose將上面的JSON查詢結果轉換爲下面的內容?
[
{
"openValue": 119.931,
"timestamp":"2017-01-20T10:30:00.000Z"
},
{
"openValue": 119.965,
"timestamp":"2017-01-20T10:31:00.000Z"
},
{
"openValue": 119.975,
"timestamp":"2017-01-20T10:32:00.000Z"
}
]
我試過選擇該字段爲...openValue.$numberDecimal
,但這並不奏效。謝謝!
編輯:這是我的貓鼬模式:
var EquityHistoryModel = new Schema({
_id: {
equityIdentifier: { type: {
exchange: { type: String, index: true },
symbol: { type: String, index: true }
}, index: true },
instant: { type: Date, index: true },
durationMinutes: { type: Number }
},
open: { type: mongoose.Schema.Types.Decimal },
high: { type: mongoose.Schema.Types.Decimal },
low: { type: mongoose.Schema.Types.Decimal },
close: { type: mongoose.Schema.Types.Decimal },
volume: { type: Number },
isDividendAdjusted: { type: Boolean },
isSplitAdjusted: { type: Boolean }
}, { collection: 'equityHistories', versionKey: false });
這裏的第一個JSON結果上面的貓鼬查詢:
mongo.EquityHistoryModel.aggregate([
{
"$match":{
"_id.equityIdentifier.exchange":passed_in,
"_id.equityIdentifier.symbol":passed_in,
"_id.instant":passed_in
}
},
{
"$project":{
"_id":0,
"openValue":"$open",
"timestamp":"$_id.instant"
}
}
],
你能告訴你的模式定義? – chridam
@chridam我添加了我的模式和我正在使用的查詢! –