Я получаю _id
s из коллекции Orders
, которые активны и соответствуют указанному условию.
const orders = await Order.find({ _id: { $in: Object.keys(ordersIdCount) }, isActive: true}).select({ _id: 1 });
ordersIdCount
- это объект, который содержит идентификаторы и количества заказов.
const ordersIdCount = {
'5asdkjbasnclxbnz6451001e': "2",
'5asdkjbasnclxbnz6451001b': "3",
'5asdkjbasnclxbnz64510018': "9",
'5asdkjbasnclxbnz6451001c': "8",
'5asdkjbasnclxbnz6451001e': "3",
'5asdkjbasnclxbnz64510019': "1"
}
Я хочу достичь этого состояния:
const ordersIdCount = {
'5asdkjbasnclxbnz64510018': "9",
'5asdkjbasnclxbnz6451001c': "8",
'5asdkjbasnclxbnz6451001b': "3",
'5asdkjbasnclxbnz6451001e': "3",
}
По фильтрация , сортировка по количествам и , принимая4 самых больших по количеству .
Что я сделал до сих пор:
const sortedIds = Object.keys(ordersIdCount)
.filter(orid => !!orders.find(o => o._id === orid))
.sort((oid1, pid2) => ordersIdCount[oid2] - ordersIdCount[oid1])
.slice(0, 10);
Затем я снова позвонил Order
модель и указал filterd _id
s.
const referredOrders = await Order.find({ _id: { $in: sortedIds } });
Чего я пытаюсь добиться: я хочу делать все это с помощью вызовов db, не используя функции сортировки и среза фильтра js.Я думаю, что я должен использовать некоторые агрегации.Нужна помощь синтаксиса MongoDb.
Это одна строка из моей коллекции заказов
{
"_id" : ObjectId("5asdkjbasnclxbnz6451001c"),
"price" : 1.2,
"name" : "myOrder"
}
Достаточно получить только поле _id
.