我从_id
集合中获得了Orders
,它们是活动的并对应于指定条件。
const orders = await Order.find({ _id: { $in: Object.keys(ordersIdCount) }, isActive: true}).select({ _id: 1 });
ordersIdCount
变量是一个包含一些订单ID和数量的对象。
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
模型并指定过滤后的_id
秒。
const referredOrders = await Order.find({ _id: { $in: sortedIds } });
我要实现的目标: 我想用不使用js过滤器排序和切片功能的db调用来做所有这些事情。我想我应该使用一些聚合。需要MongoDb语法的帮助。
这是我的订单集中的一行
{
"_id" : ObjectId("5asdkjbasnclxbnz6451001c"),
"price" : 1.2,
"name" : "myOrder"
}
仅获取_id
字段就足够了。