Javascript 使用乘法变量筛选MongoDB集合

Javascript 使用乘法变量筛选MongoDB集合,javascript,mongodb,Javascript,Mongodb,我有这样的收藏: [ {"userId": "0000", "algorithm": "algo1", "status": "Running", "waitingTime": 0}, {"userId": "0001", "algorithm": "algo1"

我有这样的收藏:

[
    {"userId": "0000", "algorithm": "algo1", "status": "Running",   "waitingTime": 0},
    {"userId": "0001", "algorithm": "algo1", "status": "Received",  "waitingTime": 0},
    {"userId": "0000", "algorithm": "algo2", "status": "Completed", "waitingTime": 123},
    {"userId": "0000", "algorithm": "algo2", "status": "Error",     "waitingTime": 134},
    {"userId": "0001", "algorithm": "algo2", "status": "Error",     "waitingTime": 150},
    {"userId": "0001", "algorithm": "algo3", "status": "Completed", "waitingTime": 100},
    {"userId": "0000", "algorithm": "algo3", "status": "Completed", "waitingTime": 120},
    {"userId": "0001", "algorithm": "algo1", "status": "Received",  "waitingTime": 0}
]
[
    {"_id": "0000", "maxWaitingTime": 123},
    {"_id": "0001", "maxWaitingTime": 100}
]
我需要找到每个用户的最长等待时间,但状态为“已完成”。每个文档的输出应有2个道具

  • “\u id”-应该是原始集合中的“userId”
  • “maxWaitingTime”-应等于状态“已完成”的最大等待时间
对于本例,输出应如下所示:

[
    {"userId": "0000", "algorithm": "algo1", "status": "Running",   "waitingTime": 0},
    {"userId": "0001", "algorithm": "algo1", "status": "Received",  "waitingTime": 0},
    {"userId": "0000", "algorithm": "algo2", "status": "Completed", "waitingTime": 123},
    {"userId": "0000", "algorithm": "algo2", "status": "Error",     "waitingTime": 134},
    {"userId": "0001", "algorithm": "algo2", "status": "Error",     "waitingTime": 150},
    {"userId": "0001", "algorithm": "algo3", "status": "Completed", "waitingTime": 100},
    {"userId": "0000", "algorithm": "algo3", "status": "Completed", "waitingTime": 120},
    {"userId": "0001", "algorithm": "algo1", "status": "Received",  "waitingTime": 0}
]
[
    {"_id": "0000", "maxWaitingTime": 123},
    {"_id": "0001", "maxWaitingTime": 100}
]
我尝试将一些过滤查询组合在一起,但效果不好。我可以把一两句话结合起来,但对于这一句,我很紧张

我尝试将distinct方法与find结合起来以获得唯一的userId,但没有成功:

db.tasks.distinct("userId").find();
我还尝试了“查找”功能内部的逻辑:

printjsononeline(db.tasks.distinct(userId).find({
    userId: "0001"
}).map(doc => doc));

但不幸的是,它不起作用。

您需要使用聚合(请参阅)。
match
操作符将允许您筛选状态,而
group
操作符将允许您获取给定用户ID的等待时间的最大值。

注意:Mongo区分大小写。人们使用的是等待时间而不是等待时间