使用 Mongoose 从 Decimal128 中提取小数 - MongoDB

2023-11-26

我正在使用 Mongoose 在 Nodejs 中查询 Mongo,并尝试提取存储为 Decimal128 的多个字段的数值。然而,该值奇怪地包含在查询结果中,我不确定如何通过 Mongo 或 Mongoose 提取它:

{data:[
  {
  "date": {
          "$numberDecimal": "1530057600000"
  },
  "open": {
          "$numberDecimal": "86.13"
  },
  "high": {
          "$numberDecimal": "86.63"
  },
  "low": {
          "$numberDecimal": "85.47"
  },
  "close": {
          "$numberDecimal": "85.64"
  },
  "volume": {
          "$numberDecimal": "308508"
  }
},

有没有办法使用 Mongodb 或 Mongoose 将上面的 JSON 查询结果转换为下面的结果?

{data:[
 {
  "date": 1530057600000
  "open": 86.13
  "high": 86.63
  "low": 85.47
  "close": 85.64
  "volume": 308508
 },

我尝试按如下方式选择字段,但这不起作用。

    data[i].date.$numberDecimal, 
    data[i].open.$numberDecimal,
    data[i].high.$numberDecimal,
    data[i].low.$numberDecimal, 
    data[i].close.$numberDecimal 

这是我的猫鼬架构:

文件夹 - 模型 - Stock.js

const mongoose = require('mongoose')
mongoose.Promise = global.Promise

const childSchemaData = new mongoose.Schema({
  "_id": false,
  date: {type: mongoose.Types.Decimal128},
  open: {type: mongoose.Types.Decimal128},
  high: {type: mongoose.Types.Decimal128},
  low: {type: mongoose.Types.Decimal128},
  close: {type: mongoose.Types.Decimal128},
  volume: {type: mongoose.Types.Decimal128}
})

const parentSchemaSymbol = new mongoose.Schema({
  "_id": false,
  symbol: {
    type: String,
    trim: true,
    minlength: 2,
    maxlength: 4,
    uppercase: true,
    required: 'Plese enter a valid symbol, min 2 characters and max 4'
  },
  // Array of subdocuments
  data: [childSchemaData],
  slug: String

})

module.exports = mongoose.model('Stock', parentSchemaSymbol)

控制器

const mongoose = require('mongoose')
const parentSchemaSymbol = mongoose.model('Stock')

exports.dbFetch = (req, res) => {
  let curValueDbFetch = req.params.symbol

  const query = { symbol: `${curValueDbFetch}` }
  const projection = { _id: 0, data: 1 }

  parentSchemaSymbol.findOne(query, projection).then(doc => {
    return res.send(doc)
  }).catch(e => {
    console.log(e)
  })
}

我将数据发送到前端,这是我在浏览器中收到的数据:

enter image description here

SOLUTION

const mongoose = require('mongoose')
const parentSchemaSymbol = mongoose.model('Stock')

exports.dbFetch = (req, res) => {
  let curValueDbFetch = req.params.symbol

  const query = { symbol: `${curValueDbFetch}` }
  const projection = { _id: 0, data: 1 }

  parentSchemaSymbol.findOne(query, projection).sort({ date: -1 }).then(doc => {
    let chartData = doc.data.map(item => {
      return {
        date: parseFloat(item.date), // the date
        open: parseFloat(item.open), // open
        high: parseFloat(item.high), // high
        low: parseFloat(item.low), // low
        close: parseFloat(item.close), // close
        volume: parseFloat(item.volume)// volume
      }
    })
    res.send(chartData)
  })
    .catch(e => {
      console.log(e)
    })
}

方法一: .

use toString()。它将把对象转换为字符串。

find((docs) => {
   let result = docs.map((doc) => {
       if(doc.open){
          doc.open = doc.open.toString();
       }

       if(doc.close){
          doc.close = doc.close.toString();
       }

       return doc;  
   });

    //send modified output
    res.json(result);
})

输出如下:-

/*
[
  {
    "open":  "86.13",
    "close": "85.64"
  },
]
*/

方法二:Mongodb 4.0以上,

db.myCollection.aggregate([
  {$match:{
   //...
   //...
   }},


  { $addFields : {
        open: {"$toString" : "$open"},
        close : {"$toString" : "$close"},
    }},
]);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Mongoose 从 Decimal128 中提取小数 - MongoDB 的相关文章

随机推荐

  • 错误:“用于调用 Google Play 开发者 API 的项目 ID 尚未在 Google Play 开发者控制台中链接。”

    我在使用服务帐户访问 Google Play Developer API 时收到以下错误 用于调用 Google Play 开发者 API 的项目 ID 尚未在 Google Play 开发者控制台中链接 服务帐户电子邮件和 p12文件是使
  • r - 来自子/父关系的分层数据框架

    我有一个子父 data frame 我想将其转换为包含所有级别和级别编号的完整层次结构列表 下面的示例数据分为三个级别 但也可能更多 我可以使用什么函数来转换数据 Source data frame name c land water ai
  • 如何删除 Matplotlib 图中的线条

    如何删除 matplotlib 轴的一行 或多行 使其实际上被垃圾收集并释放内存 下面的代码似乎删除了该行 但从未释放内存 即使显式调用gc collect from matplotlib import pyplot import nump
  • 了解 Vaadin 如何使用 GWT

    在使用 Vaadin 大约一周后 我很好奇 Vaadin 如何使用 GWT GWT 将 Javacode 编译为 Javascript 每次重新部署时都必须执行此操作 由于 Vaadin 必须被理解为一个以服务器为中心的框架 从而消除了编写
  • 如何在 Selenium Web Driver 中使用 SSL 证书?

    我在 Windows 7 上使用 Selenium Web 驱动程序 我正在尝试测试一个使用身份验证的网站 并且我需要使用 SSL 证书 当我在 Selenium 之外使用 Firefox 时 一切正常 但我注意到 Selenium 打开的
  • 无法使用 iOS 9.0 GM 在 Xcode 7.1 beta 上调试应用程序

    当我尝试在 iPad 上安装 iOS 9 0 GM 并使用 Xcode 7 1 Beta 7B60 运行我的应用程序时 出现以下错误 在此设备上启用开发时遇到错误 请尝试重新启动并重新连接设备 0xE8000076 这个问题有解决办法吗 苹
  • 版本控制如何工作?

    版本控制通常如何工作 它是否将 diff 文件保存为带有哈希值的跟踪以验证跟踪 查看Eric Sinks 关于版本控制的博客系列 此外 乔尔 斯波尔斯基写道Hg Init Mercurial 教程 这最终让我 了解 了分布式源代码控制的全部
  • 将表示为链表的两个大数相加,无需反转链表

    假设您有两个用链表表示的大数字 如何将它们相加并将结果存储在单独的链表中 例如 a 2 gt 1 gt 7 b 3 gt 4 result 2 gt 5 gt 1 您可以在不颠倒链表的情况下添加它们吗 伪代码 步骤1 遍历链表并将元素压入两
  • 在 numpy.correlate 中指定滞后

    Matlab互相关函数xcorr x y maxlags 有一个选项maxlag 返回滞后范围内的互相关序列 maxlags maxlags 纳比的numpy correlate N M mode 有三种模式 但没有一种模式允许我设置特定的
  • 如何使用 Python Pillow 定义模糊半径?

    我正在尝试模糊图像Pillow using 图像过滤器如下 from PIL import ImageFilter blurred image im filter ImageFilter BLUR 这工作得很好 只是它的设定半径对我来说太小
  • 获取未旋转的旋转矩形的边界

    我有一个已经应用了旋转的矩形 我想获得未旋转的尺寸 x y 宽度 高度 这是当前元素的尺寸 Bounds at a 90 rotation height 30 width 0 x 25 y 10 以下是旋转设置为无后的尺寸 Bounds a
  • Go mgo 包中的连接池

    文章中与 go 并发运行 mongodb 查询说 mgo DialWithInfo 创建一个会话 维护与 MongoDB 的套接字连接池 但是当我在文献记录函数的拨号信息我没有找到与我谈论池连接的内容 只有我在DialFunction Di
  • ES6 地图垫片如何工作

    根据我对文档的理解 here and here 需要一个对内存地址的引用才能工作 const foo const map new Map map set foo 123 Can only be done if memory address
  • 通过通用父类访问子类中的 Java 静态成员

    这似乎是一个新问题 但上次我使用 Java 时 该语言没有泛型 我有一个类层次结构 名称更改为尽可能通用 public abstract class AbstractBase public class ConcreateSubA exten
  • 没有主目录的用户的 SSH 公钥

    我正在运行 Mac OS X Leopard Server 并且创建了一个新用户 但没有为该用户指定主目录 是否可以让该用户使用公钥进行身份验证 我知道当用户does有一个它所在的主目录 ssh authorized keys 我不想为该用
  • 在Android清单中使用largeheap是一个好的实践吗?

    我正在发展NDK 它挂在Galaxy S3 为了测试我把android largeheap true in Manifest 然后就不存在挂起的问题了 这是一个很好的做法吗largeHeap true 谷歌是否有可能因为这个标签而拒绝我的构
  • 让 Migrate.exe 正常工作

    我一直在努力执行 EF Migrate exe 来工作 我的解决方案有几个项目 迁移和实体位于项目数据中 控制器和视图位于 Web 中 我尝试使用 migrate exe 但是我很难让第一个参数 程序集 被接受 文件说 程序集 指定包含该程
  • 在后台运行exe

    我尝试过以下方法 Start Process powershell ArgumentList C Program Files Prometheus io prometheus exe WindowStyle hidden Invoke Co
  • 使用动态对象的 MongoDB C# 驱动程序序列化

    我有一个模型 看起来像 public class Record public Record Created DateTime Now public string Id get set public string ApplicationId
  • 使用 Mongoose 从 Decimal128 中提取小数 - MongoDB

    我正在使用 Mongoose 在 Nodejs 中查询 Mongo 并尝试提取存储为 Decimal128 的多个字段的数值 然而 该值奇怪地包含在查询结果中 我不确定如何通过 Mongo 或 Mongoose 提取它 data date