不确定是否可以这样做,以为我会问。
我有以下mongodb / s
{
"store":"abc",
"offers":[{
"spend":"100.00",
"cashback":"10.00",
"percentage":"0.10"
},{
"spend":"50.00",
"cashback":"5.00",
"percentage":"0.10"
}]
}
和
{
"store":def",
"offers":[{
"spend":"50.00",
"cashback":"2.50",
"percentage":"0.05"
},{
"spend":"20.00",
"cashback":"1.00",
"percentage":"0.05"
}]
}
和
{
"store":ghi",
"offers":[{
"spend":"50.00",
"cashback":"5.00",
"percentage":"0.10"
},{
"spend":"20.00",
"cashback":"2.00",
"percentage":"0.10"
}]
}
排序需要按百分比计算。
我不确定是否必须使用其他PHP函数来执行此操作,或者Mongodb是否足够聪明以执行我想要执行的操作。
答案 0 :(得分:1)
令人惊讶的是,mongodb可以做到这一点:
// Sort ascending, by minimum percentage value in the docs' offers array.
db.collection.find({}).sort({ 'offers.percentage': 1 });
// Sort descending, by maximum percentage value in the docs' offers array.
db.collection.find({}).sort({ 'offers.percentage': -1 });
答案 1 :(得分:1)
考虑到文档中数组的数据结构,我不认为在MongoDB中进行这种排序是有意义的 - Mongo将返回整个文档(而不是数组)。
如果您正在尝试比较优惠,那么拥有一个单独的集合而不是嵌入式数组可能会更有意义。例如,您可以找到与按现金或折扣百分比排序的至少5美元的现金返还相匹配的商品。
如果您只是想在单个文档中订购商品,可以使用usort()在PHP中执行此操作。