1

不知道这是否可以做到,所以想我会问。

我有以下 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 函数的 usort 来完成它,或者 Mongodb 是否足够聪明来做我想做的事情。

4

2 回答 2

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 });
于 2012-07-31T02:18:08.017 回答
1

鉴于文档中数组的数据结构,我认为在 MongoDB 中进行这种排序是没有意义的——Mongo 将返回整个文档(而不是数组)。

如果您尝试比较报价,那么拥有一个单独的集合而不是嵌入式数组可能更有意义。例如,您可以找到匹配至少 5 美元现金返还的优惠,按支出或折扣百分比排序。

如果您只是想在单个文档中订购商品,您可以在 PHP 中使用usort()来执行此操作。

于 2012-07-31T04:01:13.247 回答