获取每种类型记录的最大虚拟字段

诺尔

我正在将 MongoDB 与猫鼬一起使用。我有一个订单集合,每个订单都有货币(美元、欧元、ILS 等)和百分比。

我的节点应用程序从另一个服务读取一个值,我的 Order 集合有一个名为 price 的虚拟字段,它是根据该值和订单文档的百分比计算出来的。

import mongoose, { Schema } from 'mongoose';
import { priceValue } from '../services/price-value';

const orderSchema = new Schema({
    currency: {
        type: 'String',
        required: true
    },
    percent: {
        type: 'Number',
        required: true
    }
}, {
    toObject: {
        virtuals: true
    },
    toJSON: {
        virtuals: true
    }
});

orderSchema.virtual('price').get(function() {
    return priceValue * this.percent;
});

export default mongoose.model('Order', orderSchema);

我需要找到每种货币的最高价格。类似于,对于每个 CURRENCY 调用:

db.orders.find({ currency: CURRENCY }).sort({percent: -1}).limit(1);

在节点应用程序中收集结果并计算虚拟价格字段。
但这感觉不正确。什么是正确的方法呢?

尼尔伦

您可以将其委托给聚合框架,而不是使用“虚拟字段”,这比查询每个可能的“货币”值要好得多。

哪里priceValue是一个简单的“常量”值,那么您只需将其提供给管道表达式:

db.orders.aggregate([
  { "$sort": { "currency": 1, "percent": -1 } }, 
  { "$group": {
    "_id": "$currency",
    "percent": { 
      "$first": { 
        "$multiply": [ 
          { "$divide": [ "$percent", 100 ] },
          priceValue
        ] 
      }
    }
  }}
])

所以你$sort要按照“货币”的顺序排列,并按照“货币”中的每个“百分比”递减。然后你$group在每个不同的“货币”上,$first从每个分组边界中获取。

然后,您需要做的就是将常量应用于$multiply返回的值priceValue,从$divideby之后的“百分比”值开始100,因为您需要实际存储的整个值的除数。

您还应该注意,从聚合管道返回的文档没有与所使用模型相同的模式附加方法。基本原因是您通常“更改返回的文档的形状”,因此“架构”不再适用。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何获取每个日期的每种类型的最大ID

来自分类Dev

在C#DBML中获取具有最新/更大日期的每种类型的记录

来自分类Dev

如何获取e剂中每种类型的最小值和最大值

来自分类Dev

从查找表中获取每种类型和每个日期的最大ID

来自分类Dev

Cosmos 文档查询以查找每种类型的最新记录

来自分类Dev

MySQL查询以获取每种类型的有限行

来自分类Dev

如何获取过去x周每种类型的数据?

来自分类Dev

MySQL查询以获取每种类型的有限行

来自分类Dev

mysql join:获取每种类型计数的零件

来自分类Dev

在Neo4j中获取每种类型的节点属性和每种类型的关系属性

来自分类Dev

从表 A 中获取 X 玩家每种奖金类型的最后一条记录,按表 B 的字段分组

来自分类Dev

如何为每种类型只返回一条记录?

来自分类Dev

Laravel雄辩 - 拣最大的每种类型 - 加盟,MAX()和组

来自分类Dev

汇总类似MySQL的值后,找到每种类型的最大值

来自分类Dev

SQL查询以查找每种类型的最大计数对应的条目

来自分类Dev

以2分钟为间隔获取每种类型的总数

来自分类Dev

如何在/ proc / filesystems中获取有关每种类型的文件系统的信息

来自分类Dev

为每种类型编译时间typeid

来自分类Dev

通用接口与每种类型的接口

来自分类Dev

如何转换数组中的每种类型?

来自分类Dev

关键字段的自定义命名在EF中的TPT(每种类型的表)策略中不起作用

来自分类Dev

从VHDL记录类型获取字段的属性

来自分类Dev

mysql选择每种类型的最后一行

来自分类Dev

每种类型客户的销售百分比

来自分类Dev

每种类型都有对应的文字吗?

来自分类Dev

mysql选择每种类型的最后一行

来自分类Dev

实体框架中每种类型的流利表映射

来自分类Dev

实体框架:软删除和每种类型的表

来自分类Dev

Rails查询每种类型的最后一个

Related 相关文章

  1. 1

    如何获取每个日期的每种类型的最大ID

  2. 2

    在C#DBML中获取具有最新/更大日期的每种类型的记录

  3. 3

    如何获取e剂中每种类型的最小值和最大值

  4. 4

    从查找表中获取每种类型和每个日期的最大ID

  5. 5

    Cosmos 文档查询以查找每种类型的最新记录

  6. 6

    MySQL查询以获取每种类型的有限行

  7. 7

    如何获取过去x周每种类型的数据?

  8. 8

    MySQL查询以获取每种类型的有限行

  9. 9

    mysql join:获取每种类型计数的零件

  10. 10

    在Neo4j中获取每种类型的节点属性和每种类型的关系属性

  11. 11

    从表 A 中获取 X 玩家每种奖金类型的最后一条记录,按表 B 的字段分组

  12. 12

    如何为每种类型只返回一条记录?

  13. 13

    Laravel雄辩 - 拣最大的每种类型 - 加盟,MAX()和组

  14. 14

    汇总类似MySQL的值后,找到每种类型的最大值

  15. 15

    SQL查询以查找每种类型的最大计数对应的条目

  16. 16

    以2分钟为间隔获取每种类型的总数

  17. 17

    如何在/ proc / filesystems中获取有关每种类型的文件系统的信息

  18. 18

    为每种类型编译时间typeid

  19. 19

    通用接口与每种类型的接口

  20. 20

    如何转换数组中的每种类型?

  21. 21

    关键字段的自定义命名在EF中的TPT(每种类型的表)策略中不起作用

  22. 22

    从VHDL记录类型获取字段的属性

  23. 23

    mysql选择每种类型的最后一行

  24. 24

    每种类型客户的销售百分比

  25. 25

    每种类型都有对应的文字吗?

  26. 26

    mysql选择每种类型的最后一行

  27. 27

    实体框架中每种类型的流利表映射

  28. 28

    实体框架:软删除和每种类型的表

  29. 29

    Rails查询每种类型的最后一个

热门标签

归档