/ / Поръчайте резултати въз основа на колекция за вграждане - mongodb, laravel, mongodb-query, jenssegers-mongodb

Ред на заявката въз основа на вградената колекция - mongodb, laravel, mongodb-query, jenssegers-mongodb

Ако приемем, че имаме множество документи със следната схема:

{
"_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")

Благодаря предварително...

Отговори:

0 за отговор № 1

Можеш :

  • развивам prices
  • сортиране по is_price_active и price
  • прегрупиране по продукт (обратно развиване)
  • в крайна сметка проект за придобиване на оригиналната форма на документа

По този начин не разчитате на факта, че активната цена винаги е последната; активната цена може да бъде навсякъде в масива.

Тук заявката:

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}}
]);