如何解决mongo查询联接-从另一个集合中获取总记录作为键
我有两个收藏夹:
quiz_customer_record 集合
user(id,status_id)
虚拟收藏
{
"_id" : ObjectId("5f6ec91cbf74d27430b9c24f"),"quiz_id" : "5f3a33185a1cd35632b8c98c","user_id" : "5efae8bed5c5f06f30a057ff","name" : "ABC","qualification" : "ttt","time_required" : "0:13 Mins","questions_attempted" : 2,"total_quiz_questions" : 2,"attempt_date" : "2020-09-26T04:52:48.169Z"
}
/* 4 */
{
"_id" : ObjectId("5f6eca82bf74d27430b9c252"),"user_id" : "5f6ec9ba3b502398598a5ade","name" : "Test","qualification" : "BSC","time_required" : "0:6 Mins","attempt_date" : "2020-09-26T04:58:46.060Z"
}
从第二个(虚拟集合中,我希望每个用户获得总记录)
我正在使用需要修改的查询:
/* 1 */
{
"_id" : ObjectId("5f6ec906bf74d27430b9c24d"),"question_id" : "5f6ec888bf74d27430b9c248","selected_answer" : [
"rgdfgdfg"
],"attempt_date" : "2020-09-26T04:52:25.977Z","correct_answer" : [
"rgdfgdfg"
],"result" : true
}
/* 2 */
{
"_id" : ObjectId("5f6eca82bf74d27430b9c250"),"attempt_date" : "2020-09-26T04:58:46.060Z","result" : true
}
/* 3 */
{
"_id" : ObjectId("5f6eca82bf74d27430b9c251"),"question_id" : "5f6ec8b4bf74d27430b9c24b","selected_answer" : [
"sdfsdf"
],"correct_answer" : [
"sdfsdf"
],"result" : true
}
这将给出如下结果:
db.quiz_customer_record.aggregate([{ $match: { quiz_id:"5f3a33185a1cd35632b8c98c"}},{
$sort: { attempt_date: -1 }
},{
$group: {
_id: "$user_id",result1: { $first: "$attempt_date" },quiz_id: { $first: "$quiz_id" },o_id: { $first: "$_id" }
}
},{
$project: {
_id: "$o_id",user_id: "$_id",result1: 1
}
}
])
预期结果:(根据/* 1 */
{
"attempt_date" : "2020-09-26T04:52:48.169Z","_id" : ObjectId("5f6ec91cbf74d27430b9c24f"),"user_id" : "5efae8bed5c5f06f30a057ff"
}
/* 2 */
{
"attempt_date" : "2020-09-26T04:58:46.060Z","_id" : ObjectId("5f6eca82bf74d27430b9c252"),"user_id" : "5f6ec9ba3b502398598a5ade"
}
,我需要虚拟集合中user_id
和quiz_id
(上述查询的结果1)匹配的记录数)
attempt_date
其中/* 1 */
{
"attempt_date" : "2020-09-26T04:52:48.169Z","total_dummy_rec":0
}
/* 2 */
{
"attempt_date" : "2020-09-26T04:58:46.060Z","total_dummy_rec":2
}
是“虚拟”集合中每个用户的总记录数。
我对如何处理感到困惑,因此我可以实现此结果。帮我找到解决方案。谢谢!
解决方法
您可以在管道阶段之后添加2个阶段,
-
$lookup
加入dummy
集合,其中在let和管道匹配条件下传递必填字段 - 最后移动了
$project
,并使用$size
计算了虚拟文档的总数
{
$lookup: {
from: "dummy",let: {
quiz_id: "$quiz_id",user_id: "$_id",attempt_date: "$attempt_date"
},pipeline: [
{
$match: {
$expr: {
$and: [
{ $eq: ["$$quiz_id","$quiz_id"] },{ $eq: ["$$user_id","$user_id"] },{ $eq: ["$$attempt_date","$attempt_date"] }
]
}
}
}
],as: "dummy"
}
},{
$project: {
_id: "$o_id",result1: 1,total_dummy_rec: {
$size: "$dummy"
}
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。