mongodb如何查询sum字符串?

2024-01-04

我有一些数据order文档如:

{ "_id": "...", "orderTotal": { "amount" : "10.99", "unit": "USD"}, "orderTime": "...", ... }
{ "_id": "...", "orderTotal": { "amount" : "9.99", "unit": "USD"}, "orderTime": "...",  ... }
{ "_id": "...", "orderTotal": { "amount" : "8.99", "unit": "USD"}, "orderTime": "...",  ... }

我想按天查询所有订单组的orderTotal:

db.getCollection('order').aggregate([
  {
    '$group' : {
        '_id': { day: { $dayOfMonth: "$orderTime"}, month: {$month: "$orderTime"}, year: { $year: "$orderTime" }},
        'totalAmount': { $sum: '$itemTotal.amount' },
        'count': { $sum: 1 }
    }
  }
])

but got:

{
    "_id" : {
        "day" : 12,
        "month" : 12,
        "year" : 2016
    },
    "totalAmount" : 0,
    "count" : 4607.0
}

the amount是一个字符串。使用parseFloat但得到了 NaN。

db.getCollection('order').aggregate([
  {
    '$group' : {
        '_id': { day: { $dayOfMonth: "$orderTime"}, month: {$month: "$orderTime"}, year: { $year: "$orderTime" }},
        'totalAmount': { $sum: parseFloat('$itemTotal.amount') },
        'count': { $sum: 1 }
    }
  }
])

got

{
    "_id" : {
        "day" : 12,
        "month" : 12,
        "year" : 2016
    },
    "totalAmount" : NaN,
    "count" : 4607.0
}

我无法更新order要更改的文档itemTotal.amount像其他问题所说的那样浮动:

db.order.find().forEach(function(data) {
    db.order.update({
        "_id": data._id,
        "itemTotal.amount": data.itemTotal.amount
    }, {
        "$set": {
            "itemTotal.amount": parseFloat(data.itemTotal.amount)
        }
    });
})

我没有权限执行此操作。 那么,我怎样才能得到每天的总和呢?


从 MongoDB 3.4 开始这是不可能的。该功能已被请求,但尚未实现:

需要类型转换机制来在字符串和数字之间进行转换 https://jira.mongodb.org/browse/SERVER-11400

所以解决你的问题的唯一方法是在javascript中手动执行totalAmount总和...


Edit

现在这可以在MongoDB 4.0例如,它引入了从一种类型转换为另一种类型的运算符$toDouble

所以查询将是:

db.collection.aggregate([
  {
    "$group": {
      "_id": null,
      "totalAmount": {
        "$sum": {
          "$toDouble": "$orderTotal.amount"
        }
      },
      "count": {
        "$sum": 1
      }
    }
  }
])

你可以在这里尝试一下:mongoplayground.net/p/4zJTPU912Es https://mongoplayground.net/p/4zJTPU912Es

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

mongodb如何查询sum字符串? 的相关文章

随机推荐

  • 哪种 Objective-C 类型适合处理金钱?

    哪种 Objective C 类型适合处理金钱 我需要一些与核心数据兼容的东西 有两种解决方案 Use an int 并始终跟踪以美分为单位的货币价值 或您所使用的任何货币的最小可能划分 仅使用整数计算 Use NSDecimalNumbe
  • C# 中的重载解析、扩展方法和泛型

    我的 C 源代码中有以下场景 class A class Dispatch
  • Python:用 re.sub 替换列表中的多个特定单词

    我有以下字符串并列出 changewords 我想将 word from list n 替换为 word from list 我不想替换 n 的所有实例 string Foo n value of something n Bar n Ano
  • TaskFactory 新 UI 创建

    如何使用 TaskFactory 创建新的 UI 元素 当我尝试时出现以下错误 调用线程必须是 STA 因为许多 UI 组件都需要它 示例代码 Dim txtBoxList as new List Of TextBox Sub StartT
  • WiFiCameraApp 中的蓝牙视频流

    今天 我看到很多人有兴趣寻找使用移动设备通过蓝牙进行视频流的解决方案 但我还没有找到任何方便的意见来描述应该做什么来实现此类功能 一方面 我有相当抽象的信息 为了成功地进行视频流传输 两个设备都应该符合视频分发配置文件 VDP 这是蓝牙配置
  • 从多个子进程进行非阻塞读取 (Python)

    我目前有以下代码 受到答案的启发python 中 subprocess PIPE 的非阻塞读取 https stackoverflow com questions 375427 non blocking read on a subproce
  • 将内容控件的内容导出到另一个word文档中

    我有一个包含许多内容控件的Word文档 如何将内容控件的内容导出到另一个word文档中 我正在使用 C 并打开 xml sdk 问候 这里有两篇很棒的文章将向您展示如何做到这一点 使用 LINQ to XML 进行检索 Word 2007
  • 如何捕获 MonoTouch 应用程序中的 iOS 崩溃

    我们已经记录了 iPad MonoTouch 应用程序中发生的任何 Net Framework 异常 并且可以将这些异常返回给我们的支持部门以帮助分析和解决问题 但是 如果应用程序由于 iOS 错误 即 sigsev 而崩溃 我们不确定如何
  • 如何使用axios获取本地文件?

    我正在尝试获取本地文件 结果 js componentWillMount axios get config db json then function response alert ok catch function error alert
  • 如何使用c#在stackexchange redis客户端上执行flush命令

    我们如何使用 stackexchange redis 客户端执行 FlushAll 和 FlushDB redis 命令 The 项目主页 https github com StackExchange StackExchange Redis
  • 更新 ListView 行中与数据库行对应的复选框

    我已经设置了android focusable false 在我的自定义布局中的复选框上 我的后端 SQLite 数据库取决于 CheckBox 是否被选中 我的每一行ListView对应于我的数据库中的一行 所以我的问题是 我应该在哪里放
  • 如何模拟返回最终类的静态方法?

    我想模拟下一行 Bigquery bigquery Transport newBigQueryClient options build 这里的问题是 newBigQueryClient 方法返回 Bulder 类 这是最终的 这意味着我不能
  • SSE 内在函数和循环展开

    我正在尝试优化一些循环并且已经成功 但我想知道我是否只部分正确地完成了它 举例来说 我有这个循环 for i 0 i
  • MongooseError - 操作 `users.findOne()` 缓冲在 10000 毫秒后超时

    我的代码最初可以工作 但我不知道为什么它停止工作并给了我这个错误 MongooseError Operation users findOne buffering timed out after 10000ms at Timeout
  • 如何防止传单地图在闪亮的应用程序中重置缩放?

    我自己和其他人构建了一个在线应用程序的原型 以帮助交通规划者优先考虑自行车道的新资金 https robinlovelace shinyapps io fixMyPath https robinlovelace shinyapps io f
  • java 将对象从 JFrame 传递到 JPanel

    我正在使用 NetBeans 在 Java 中开发一个独立的应用程序 该应用程序通过串行端口获取和发送数据 我正在使用一个很棒的 AP I 进行串行通信 称为 java 简单串行连接器http code google com p java
  • jQuery:如何获取光标下方的元素?

    我正在执行拖放操作 并且当我将某个元素移至妨碍我的元素上方时 我希望该元素向下移动 一个简单的技巧就是这样说 var hoverElem null hover function hoverElem this 然后当你需要调用任何函数来获取值
  • 对一个数组和其他数组进行排序?

    这是 C 示例 int a 1000 3 1 5 4 int b 1000 7 9 11 3 如果我对数组 a 进行排序 数组 b 也跟随数组 a 我该如何做到这一点 example a 1000 1 3 4 5 b 1000 9 7 3
  • 将最大和最小 JVM 堆大小设置为相同好吗?

    目前 在我们的测试环境中 最大和最小 JVM 堆大小设置为相同的值 基本上是专用服务器计算机允许我们的应用程序使用的大小 这是性能最佳的配置还是给 JVM 一个范围会更好 更新 这个答案最初写于 2014 年 现已过时 彼得的回答是正确的
  • mongodb如何查询sum字符串?

    我有一些数据order文档如 id orderTotal amount 10 99 unit USD orderTime id orderTotal amount 9 99 unit USD orderTime id orderTotal