Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MongoDB使用$lookup、$unwind、$match进行搜索_Mongodb_Aggregation Framework - Fatal编程技术网

MongoDB使用$lookup、$unwind、$match进行搜索

MongoDB使用$lookup、$unwind、$match进行搜索,mongodb,aggregation-framework,Mongodb,Aggregation Framework,在我的mongodb中有两个集合,分别命名为“教师”和“课程”,其结构如下所示 老师 { “评级”:4, “教师id”:“123”, “课程计数”:1, }, { “评级”:5, “教师id”:“456”, “课程计数”:4, } 课程 { “教师id”:“123”, "先进":是的,, }, { “教师id”:“456”, "先进":假,, } 我想搜索的是哪门课程的老师教的课程少于2门,而这门课程的进阶是正确的 我想要的结果 { “教师id”:“123”, "先进":是的,, } 我试

在我的mongodb中有两个集合,分别命名为“教师”和“课程”,其结构如下所示

老师
{
“评级”:4,
“教师id”:“123”,
“课程计数”:1,
},
{
“评级”:5,
“教师id”:“456”,
“课程计数”:4,
}
课程
{
“教师id”:“123”,
"先进":是的,,
},
{
“教师id”:“456”,
"先进":假,,
}
我想搜索的是哪门课程的老师教的课程少于2门,而这门课程的进阶是正确的

我想要的结果
{
“教师id”:“123”,
"先进":是的,,
}
我试过了
db.getCollection('course').aggregate([
{“$limit”:10},
{“$lookup”:{
“localField”:“教师id”,
“from”:“teacher”,
“外域”:“教师id”,
“作为”:“教师”
}},
{“$unwind”:{path:'$teacher',preserveNullandmptyarray:true},
{$match':{
"先进":对,,
'教师.课程计数':{'$lt':2}
}}
])
但是好像不行,有人能帮我吗?谢谢

试试这个:

db.course.aggregate([
  {
    "$match": {
      "advanced": true
    }
  },
  {
    "$lookup": {
      "from": "teacher",
      "localField": "teacher_id",
      "foreignField": "teacher_id",
      "as": "teacher"
    }
  },
  {
    "$match": {
      "teacher.course_count": {
        "$lt": 2
      }
    }
  },
  {
    "$project": {
      "_id": 0,
      "advanced": 1,
      "teacher_id": 1
    }
  },
  {
    "$limit": 10
  }
])


注意:如果需要访问
教师
数组内容,可以使用
$unwind
+
$project
$let
操作符。如果此解决方案满足您的要求,请告知我

您可能会发现,在教师集合中进行汇总、查找相应的课程、删除任何教授0门或2门以上课程的课程,然后删除任何教授非高级课程的课程更为简单。这应该在教师和课程之间留下一个1:1的映射。它在MongoPlayground上使用了我的少量真实数据,但在我的真实数据库上不起作用。根据我的大型数据库,查询似乎是超时的。我仍在寻找其他方法来处理我的问题。您知道其他解决方案吗(不限制$lookup和$unwind都可以),谢谢您的帮助!