使用猫鼬对数组中的值进行排序

Posted

技术标签:

【中文标题】使用猫鼬对数组中的值进行排序【英文标题】:Sort on values in array with mongoose 【发布时间】:2022-01-20 17:55:38 【问题描述】:

我有一个产品架构。 我希望能够查询它们并按折扣排序。 价格用一个名为 price 的数组表示,最新的元素是最新的值。 即,我希望在查询中首先获得折扣最高的产品。

架构:

const mongoose = require('mongoose');

const ProductsSchema = new mongoose.Schema(
  
    productName: 
      type: String,
    ,
    price: [
      
        date: 
          type: String,
        ,
        value: 
          type: Number,
        ,
      ,
    ],
  ,
   collection: 'products' 
);
const products = mongoose.model('products', ProductsSchema);
module.exports = products;

【问题讨论】:

折扣是类似 2 个价格的差异,但哪 2 个? 2持续?最高价和最低价?第一个价格和最后一个价格? 【参考方案1】:

查询1

添加一个名为 discount 的字段 discount= priceN-princeN-1(最后2个价格的差值),这里像最新的折扣 如果产品有

Test code here

aggregate(
["$set":
  "discount":
   "$cond": 
    ["$lte":["$size":"$price", 1], 0,
     "$subtract":
      ["$last":"$price.value",
       "$arrayElemAt":
        ["$price.value", "$subtract":
                          ["$size":"$price", 2]]]],
 "$sort":"discount":-1])

查询2

同上 折扣 = lastPrice - minPrice

*您可以将$last 替换为$max 以获得有史以来的最大折扣

aggregate(
["$set":
  "discount":
   "$cond":
    ["$lte":["$size":"$price", 1], 0,
     "$subtract":
      ["$last":"$price.value", "$min":"$price.value"]],
 "$sort":"discount":-1])

【讨论】:

ty,折扣以 % 为单位。但我想我只需要使用除法而不是减法。 :) 感谢您的帮助!

以上是关于使用猫鼬对数组中的值进行排序的主要内容,如果未能解决你的问题,请参考以下文章

猫鼬对所有文档求和

猫鼬,改变数组中的值

使用猫鼬模式将多个选择元素值中的值存储到MongoDB中的数组中

查询父项时如何获取猫鼬子文档数组中的值的聚合总和?

如何对 mongoose/mongodb 和 nodejs 中的对象数组进行排序?

如何按对象中的值对数组进行排序