0

假设我们有多个具有以下架构的文档:

{
        "_id" : ObjectId("55ec6108794ac3cc530041ac"),
        "product": "Product x",
        "desc": "Blah Blah Blah",
        "prices" : [
                {
                    "price": 12.3,
                    "is_price_active": false,
                },
                {
                    "price": 15.3,
                    "is_price_active": false,
                },
                {
                    "price": 15,
                    "is_price_active": true,
                }
        ]
}

是否可以根据活动价格订购结果集,或者换句话说,是否可以根据最后价格订购结果(因为在我的情况下,活动价格始终是最后价格)?

像这样的东西:orderBy('prices.[prices.length - 1].price', 'desc')

提前致谢...

4

1 回答 1

0

你可以 :

  • 放松prices
  • 排序is_price_activeprice
  • 按产品重新组合(反向展开)
  • 最终项目以获得文档的原始形状

这样您就不必依赖于活跃价格总是最后一个这一事实;有效价格可以是数组中的任何位置。

这里的请求:

db.products.aggregate([
    {$unwind : "$prices"},
    {$sort : { "prices.is_price_active":-1, "prices.price" : 1 }},
    {$group : { "_id" : {"_id" : "$_id", "product" : "$product", "desc" : "$desc"}, "prices" : {$push : "$prices"} }},
    {$project : {"_id" : "$_id._id", "product" : "$_id.product", "desc" : "$_id.desc", "prices" : 1}}
]);
于 2015-09-07T11:15:34.310 回答