从Orders集合中获取_id,并根据条件进行一些过滤

时间:2019-01-31 21:07:57

标签: javascript mongodb ecmascript-6

我从_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字段就足够了。

0 个答案:

没有答案