我如何使用 Node.js 和 Mongoose 计算总正价、总负价和总和

2024-02-23

我已经编写了获取所有用户记录的查询

exports.index = function(req, res) {
    Userdata.find(function(err, userdatas) {
        if (err) {
            return handleError(res, err);
        }

        console.log(userdatas);

    });

};

控制台我收到以下文件

{
    "_id" : ObjectId("584bc9ba420a6b189c510af6"),
    "user_id" : 1,
    "price" : 2000.0,
    "type" : "credit",

},
{
    "_id" : ObjectId("584bc9ba420a6b189c510af7"),
    "user_id" : 1,
    "price" : -1000.0,
    "type" : "credit",

},
{
    "_id" : ObjectId("584bc9ba420a6b189c510af8"),
    "user_id" : 2,
    "price" : 1000.0,
    "type" : "credit",

}

现在我想计算总正数、总负数价格和总和(总正数-总负数)

一旦计算出,我需要在摘要集合中插入/更新

如果用户 ID 已经出现在摘要集合中,那么我们需要更新特定的用户文档

如果用户 ID 不存在,我们需要为该用户创建新文档

这里摘要集合已经存在 user_id = 1 ,因此我们需要更新此文档,并且 user_id = 2 不存在于摘要集合中,因此我们需要创建 .

    {
        "_id" : ObjectId("584bc9ba420a6b189c510af9"),
        "user_id": 1,
        "Totalpositiveprice": 3000.0,
        "Totalnegativeprice": 0,
        "Balanceprice": 3000.0
    },
{
        "_id" : ObjectId("584bc9ba420a6b189c510af9"),
        "user_id": 3,
        "Totalpositiveprice": 200.0,
        "Totalnegativeprice": -190,
        "Balanceprice": 10.0
    }

我的预期结果:

    {
        "_id" : ObjectId("584bc9ba420a6b189c510af9"),
        "user_id": "1",
        "Totalpositiveprice": 5000.0,
        "Totalnegativeprice": -1000.0,
        "Balanceprice": 4000.0
    },
    {

        "user_id": "2",
        "Totalpositiveprice": 1000.0,
        "Totalnegativeprice": 0,
        "Balanceprice": 1000.0
    },
   {
        "_id" : ObjectId("584bc9ba420a6b189c510af9"),
        "user_id": 3,
        "Totalpositiveprice": 200.0,
        "Totalnegativeprice": -190,
        "Balanceprice": 10.0
    }

一旦计算出,我需要在摘要集合中插入/更新


考虑到预期结果是数字,并且值来自summary集合是数字(否则你需要将它们设为数字)这里是计算结果的聚合:

db.getCollection('userpricing').aggregate([
    {$group: {
        _id:"$user_id", 
        user_id: {$first: "$user_id"}, 
        Totalpositiveprice:{$sum:{$cond:[{ '$gt': ['$price', 0]}, "$price", 0]}}, 
        Totalnegativeprice:{$sum:{$cond:[{ '$lt': ['$price', 0]}, "$price", 0]}},
        Balanceprice:{"$sum":"$price"}}
     },
    {
      $lookup:
        {
          from: "summary",
          localField: "user_id",
          foreignField: "user_id",
          as: "user_id2"
        }
   },
   {$project: {
    _id:0, 
    user_id:1, 
    Totalpositiveprice: {$sum: ["$Totalpositiveprice", {$sum: "$user_id2.Totalpositiveprice"}] },
    Totalnegativeprice: {$sum: ["$Totalnegativeprice", {$sum: "$user_id2.Totalnegativeprice"}] },
    Balanceprice: {$sum: ["$Balanceprice", {$sum: "$user_id2.Balanceprice"}] },
}},

     {$out: "summary"}
]).pretty()

Result:

db.summary.find().pretty()

{
    "_id" : ObjectId("584fde2906c7385883be0d15"),
    "user_id" : 2,
    "Totalpositiveprice" : 10000,
    "Totalnegativeprice" : 0,
    "Balanceprice" : 10000
}
{
    "_id" : ObjectId("584fde2906c7385883be0d16"),
    "user_id" : 1,
    "Totalpositiveprice" : 23000,
    "Totalnegativeprice" : -10000,
    "Balanceprice" : 13000
}

如果需要的话,稍后您需要将它们转换为字符串。

Note: 结果它用新的计算(和更新)值覆盖摘要集合。最好先测试一下你的结果。

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

我如何使用 Node.js 和 Mongoose 计算总正价、总负价和总和 的相关文章

  • nodejs mocha suite 未定义错误

    我正在尝试使用摩卡运行一些测试 但似乎无法克服这个错误 E tdd nodejs cart gt mocha cart test js node js 201 throw e process nextTick error or err Re
  • Mongodb - 为现有集合添加架构

    我的 MongoDB 中有一个包含 1300 万条记录的集合 不幸的是 当我创建这个集合时 没有为其创建模式 我想知道除了备份整个数据库 创建架构并上传所有数据之外 是否有任何方法可以添加 JSON 架构 您可以使用以下方法将 JSON 架
  • Nodejs 一个接一个地运行异步函数

    我是 JS nodejs 的新手 所以如果我不能提出切中要害的问题 请原谅我 所以基本上 如果我有两个异步函数 async function init async function main 如何确保在 init 完成其异步请求后调用 ma
  • Pymongo 批量插入

    我正在尝试批量插入文档 但批量插入时不会插入超过 84 个文档 给我这个错误 in insert pymongo errors InvalidOperation cannot do an empty bulk insert 是否可以批量插入
  • 重写规则,以便正确加载具有绝对路径的 css 和 js 文件

    我花了两个小时 但我无法弄清楚 我不知道如何谷歌解决方案 这是我在 htaccess 文件中的重写规则 RewriteCond REQUEST URI blog RewriteRule blog http localhost 2368 1
  • npm install 命令下载所需包的源位置是什么?

    我试图获取命令 npm install 尝试连接的源位置 URL 并根据 package json 文件获取要下载的依赖包 并将其放置在本地框中 从下面提到的网址 http www tutorialspoint com nodejs nod
  • JITSU 无法安装 OSX [节点 0.8.17 和 NPM 1.2.0] WTF

    我在通过 NPM 安装 jitsu 时遇到问题 我在 mac osx 10 6 8 上安装了节点 0 8 17 和 NPM 1 2 0 当我跑步时 sudo npm install jitsu g 首先它警告未找到自述文件 npm WARN
  • 使用 AWS CDK 为 lambda 指定自定义角色

    我意识到它很新 但我没有看到任何语言的任何示例 说明如何为使用 AWS CDK 创建的 lambda 指定角色 我正在尝试这样做 const cdk require aws cdk cdk const lambda require aws
  • 如何在Sequelize中设置查询超时?

    我想看看如何在 Sequelize 中设置查询的超时时间 我查看了 Sequelize 文档以获取一些信息 但我找不到我要找的东西 我发现的最接近的是 pools acquire 选项 但我不想设置传入连接的超时 而是设置正在进行的查询的超
  • 使用 Jade 评估自定义 javascript 方法 (CircularJSON)

    我想通过 Jade 将一个对象解析为客户端 JavaScript 通常这会起作用 script var object JSON parse JSON stringify object but my object is circular ht
  • 如何在 next-auth 中将数据添加到客户端 API?

    我目前正在使用凭据提供程序使用 next auth 进行授权 我有会话正在运行并且用户可以登录等 但是 在会话中我需要使用客户端 API 用户 名字 姓氏传递一些数据 用户名和电子邮件 默认情况下 客户端 API 传递名称 电子邮件和图像
  • 找到对应的未经V8优化的JS代码源

    我尝试优化 node js 应用程序的性能 因此我正在分析 V8 的 JIT 编译器的行为 当通过运行应用程序时node trace deopt trace opt code comments print optcode 输出包含许多重复出
  • 从自己的 gitlab 服务器安装节点模块

    我想从我们的 gitlab 服务器安装节点模块 这是存储库的链接 http ABCD GITLAB myGroup myNodeModule git http ABCD GITLAB myGroup myNodeModule git 根据n
  • nvm 与 npm 配置“前缀”选项不兼容:

    我正在尝试运行另一个 NodeJS 版本nvm但出现此错误 nvm use v4 2 4 nvm is not compatible with the npm config prefix option currently set to Us
  • MongoDB:检查值是否为空或数组是否为空

    我想匹配所有不包含 公司 属性或 公司 值为空或空数组的文档 User find Company in null function err users if err throw err console log users length th
  • 是否可以提高 Mongoexport 速度?

    我有一个 1 3 亿行的 MongoDB 3 6 2 0 集合 它有几个简单的字段和 2 个带有嵌套 JSON 文档的字段 数据以压缩格式 zlib 存储 我需要尽快将其中一个嵌入字段导出为 JSON 格式 然而 mongoexport 需
  • 在打字稿中导入 json

    我是 typescript 的新手 在我的项目中 我们使用 typescript2 在我的要求之一中 我需要导入 json 文件 所以我创建了 d ts 文件如下 test d ts declare module json const va
  • 在 MySQL 中存储表情符号的编码问题:如何使用 Prisma ORM 在 NodeJS 中定义字符排序规则?

    亲爱的 Nodejs 专家和数据库专家 我们在 MySQL 数据库中存储表情符号和其他特殊字符时遇到问题 我们使用 Prisma 得到一个错误 这是我们使用的 ORM 参数无法从排序规则 utf8 general ci 转换为 utf8mb
  • 管理员未授权 Mongodb 执行 listDatabases 命令

    删除 mongodb 用户后 无法重新连接 mongo 没有 验证 我创造了超级用户 https docs mongodb org v2 6 reference built in roles superuser roles tomuser
  • 使用 MongoDB 和 Nodejs 插入和查询日期

    我需要一些帮助在 mongodb 和 nodejs 中按日期查找记录 我将日期添加到抓取脚本中的 json 对象 如下所示 jsonObj last updated new Date 该对象被插入到 mongodb 中 我可以看到如下 la

随机推荐

  • 如何使用 Selenium webdriver 单击第二个提交按钮?

    Example 对于第一个按钮
  • 在主 Activity 中嵌入外部 Intent

    我见过许多使用 ActivityGroup 在单个视图中嵌入多个 Activites 的示例 在每种情况下 正在加载的活动都是当前应用程序的内部活动 此外 它们似乎都占据了整个视野 我想使用特定 MIME 类型的 Intent 启动外部活动
  • 将任务添加到 Build.scala

    该文件http www scala sbt org 0 13 0 docs Detailed Topics Tasks html http www scala sbt org 0 13 0 docs Detailed Topics Task
  • 查找名称包含字符串的所有文件[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我一直在寻找一个命令 该命令将从当前目录返回文件名中包含字符串的文件 我见过locate and find可以查找以某些内容开头的文件的命
  • NuGet 包管理器:“AutoMapper”已具有为“Microsoft.CSharp”定义的依赖项

    我尝试在 Visual Studio Premium 2012 上使用 NuGet 将 AutoMapper 添加为项目的依赖项 但失败 它说 手术失败 AutoMapper 已经定义了一个依赖项 微软 CSharp 我可以添加其他依赖项
  • Flutter 重定向到 initState 上的页面

    我有一个应用程序 您需要登录才能继续 例如使用 Google 我想在需要身份验证时重定向用户 但是当我运行Navigator of context pushNamed myroute 我收到以下错误 EXCEPTION CAUGHT BY
  • 如何从 firebase 中删除条目

    我正在探索 Firebase 的功能 我在如何使用 java 代码从 Firebase 中删除节点或条目时遇到了问题 我搜索了他们的API 网络版本确实提供了remove 函数 但java没有 有一个removeValue 方法上的Fire
  • FluentNHibernate Component.ColumnPrefix 未应用

    我最近升级了FluentNHibernate from v1 1 0 685 to v1 2 0 712 最新 对于NHibernate 2 1 我的问题似乎是使用的类Component ColumnPrefix 映射 例如 public
  • ret2libc 攻击不会生成 shell

    我执行了 ret2libc 一切正常 但 shell 没有生成 源代码是 include
  • JHipster 的正确 Eclipse 设置是什么?

    我在第一次尝试在 STS Eclipse 中编译 jhipster 项目时收到此错误 The type org springframework core NestedRuntimeException cannot be resolved I
  • 如何向 PyPi 分发类型提示?

    我致力于将 Python 3 5 类型提示添加到响应库中 但是当我测试进行分发时 sdist or bdist wheel 它没有安装我的 pyi文件 我可以看到它是发行版的一部分 但仅此而已 您可以在此处查看我在存储库中获得的内容 htt
  • 包含 jQuery $.post() 函数的函数的返回值

    我知道 AJAX 是异步的 等等 但我有以下代码 function doesUsernameExist element Check via AJAX POST if username already exists in the databa
  • 合并 2 个排序列表

    我被要求针对以下问题提出尽可能多的解决方案 编写一个函数 它接受两个数字列表 均假设为 按升序排列 并将它们合并到一个列表中 也在 升序 我的第一个解决方案是append list1 onto list2然后重新sort 然后我发现一个内置
  • Android Mono 中的自定义应用程序子类

    我试图创建一个 Android App Application 的子类来覆盖 OnCreate 但我无法让它工作 这是我的代码 namespace MonoAndroidAcra Application Debuggable true La
  • 如何访问 tcp 标头详细信息?

    就像我创建了套接字并将该套接字绑定到客户端一样 我能够连接两侧并能够发送任意数量的数据 它基本上是 TCP 套接字 我的问题是我想访问 TCP 标头详细信息以检查和设置某种操作的参数 但我无法做到这一点 我正在用户空间中工作 从套接字级别我
  • 如何使用 Mercurial“恢复”未更改的文件?

    我在我的计算机上安装了 Windows7 我必须更改所有权限 取得所有权 这显然 触及 了我的所有文件 现在所有内容似乎都被 修改 当我执行 hg status 时 但只有一些文件有实际更改 是否有一个命令我可以运行 以便我可以 提交 或
  • 如何在 wicket 1.5 中的页面加载时打开模式窗口

    我使用 wicket 1 4 x 一段时间 在这里找到的解决方案效果很好 如何在页面加载时打开模态对话框 https stackoverflow com questions 4765790 how to open modaldialog o
  • 如何在 VBA 中替换范围/选择范围内的 Microsoft Word 字符样式?

    我正在开发一个带有宏的 Word 2007 模板 该宏会将字符样式应用于所选文本 查找 替换功能似乎是一个很好的起点 但我认为我发现了一个错误 限制 导致宏无法按预期工作 这是我的 vba 代码 Sub restyleSelection D
  • 如何检查按钮形状是否启用? [复制]

    这个问题在这里已经有答案了 如何使用 UIAccessibility 检查 iOS 设备辅助功能设置中的 按钮形状 选项是否已启用 我想在定制按钮上支持 按钮样式 我将代码转换为this https stackoverflow com a
  • 我如何使用 Node.js 和 Mongoose 计算总正价、总负价和总和

    我已经编写了获取所有用户记录的查询 exports index function req res Userdata find function err userdatas if err return handleError res err