使用猫鼬对数组中的值进行排序
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中的数组中