node.js - MongoDB如何限制每个组/类别/条件的结果?
问题描述
假设我有一个产品库存数据库,说明每个产品实例的状态。
[
{ prod: A, location: 1, status: 1 },
{ prod: A, location: 1, status: 2 },
{ prod: A, location: 2, status: 1 },
{ prod: A, location: 3, status: 1 },
{ prod: B, location: 2, status: 2 },
{ prod: B, location: 1, status: 1 },
{ prod: B, location: 1, status: 2 },
{ prod: B, location: 1, status: 2 },
{ prod: C, location: 1, status: 1 }
]
我们有一些动态查询对,比如
[A: 2, B: 4]
其中数字是相应产品的结果限制。(意味着我们需要两个 As 和四个 B)(当然可以有 Cs 和 Ds 等)
现在我知道在聚合中我们可以匹配 status=1 和 prod %in% [A,B]。
我们可以对整个查询结果设置一个整体 $limit,比如只过滤 10 个条目。
而且 $slice 也没有用,因为它不能接受多个参数。
那么,我必须执行多个查询还是有一种有效的方法可以在一个聚合中执行此操作?
(我搜索了很多,似乎我们只有每个组的前 N 个结果的解决方案。
例如:mongodb 中的多个限制条件)
编辑:
为了澄清,基本上我想要不同产品的不同限制。
这就是我能做的,使用 for 循环进行多个查询。
但是有没有办法在一个聚合中做到这一点而不循环?
q = {A:2, B:4};
allResult = [];
Object.keys(q).forEach(k => {
result = db.find({prod:k}).limit(q[k]).exec(); //find for one prod
allResult = allResult.concat(result);
});
预期输出:
[
{ prod: A, location: 1, status: 1 },
{ prod: A, location: 1, status: 2 },
{ prod: B, location: 2, status: 2 },
{ prod: B, location: 1, status: 1 },
{ prod: B, location: 1, status: 2 },
{ prod: B, location: 1, status: 2 }
]
解决方案
推荐阅读
- sql - 减去两行并在 Sql Server 中保留具有相同 ID 的最新行
- c++ - 创建一个始终返回零但优化器不知道的函数
- r - 字典不受输入影响?
- swift4 - iOS swift4 的 Paytm 集成中 Order_id 无效
- javascript - 在挂起的 ajax 获取期间重新加载页面
- c++ - std::string::reserve 不能创建精确容量的 std::string
- java - 使用分页按日期对 Recyclerview 项目进行分组
- php - Symfony 2.8 中的表单不显示错误
- android - 升级安装了 Android-Studio Ubuntu 18.04 的 CMake 版本
- python - 如何将 mock.patch (unittest) 应用于菜单选择功能(用户输入驱动)