根据嵌入集合订购结果

时间:2015-09-07 10:27:51

标签: mongodb laravel mongodb-query jenssegers-mongodb

假设我们有多个文档,其中包含以下架构:

youtableview.contentInset = UIEdgeInsetsMake(x, 0, 0, 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, } ] }

提前致谢...

1 个答案:

答案 0 :(得分: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}}
]);