mongodb и сортировка

не уверен, что это можно сделать, поэтому подумал, что я спрошу.

У меня есть следующие 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" }] } 

сортировка должна быть в процентах.

Если кто-то может помочь, это будет здорово. Я не уверен, что мне придется использовать usort другой функции PHP, чтобы сделать это, или если Mongodb достаточно умен, чтобы делать то, что я хочу делать.

Solutions Collecting From Web of "mongodb и сортировка"

Удивительно, да, 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 }); 

Учитывая вашу структуру данных массивов в документах, я не думаю, что имеет смысл делать это в MongoDB – Mongo будет возвращать целые документы (а не массивы).

Если вы пытаетесь сравнить предложения, вероятно, имеет смысл иметь отдельную коллекцию вместо встроенного массива. Например, вы можете найти предложения, соответствующие кассовому наличку не менее 5 долларов США, отсортированные по расценкам или процентной скидке.

Если вы просто пытаетесь заказать предложения в одном документе, вы можете сделать это на PHP с помощью usort () .