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区分大小写。人们使用的是等待时间而不是等待时间