使用从一个模型填充到另一个模型来检索数组数据

Posted

技术标签:

【中文标题】使用从一个模型填充到另一个模型来检索数组数据【英文标题】:Retrieve Array Data Using Populate from One Model to Another 【发布时间】:2021-09-18 19:19:41 【问题描述】:

这是我的 MongoDB 数据库的两个模型。

QuestionsInfo



    "_id": ObjectId("60e5f5fce2446faa95e6eca7"),
    "courseName": "ML",
    "user": ObjectId("6087dc4c2ba7a828363c9fca"),
    "questions": [
        
            "questionInput": 
                "question": "This is the first Question. `(a+b)^2` ",
            ,
            "id": "aLC/QNz/AOLO9Fyj7oJT",
            "createdAt": "2021-07-07T18:41:18.971Z"
        ,
        
            "questionInput": 
                "question": "This is the first Question. `(a+b)^2` ",
            ,
            "id": "aLC/QNz/AOLO9Fyj7oJJ",
            "createdAt": "2021-07-07T18:41:19.971Z"
        ,
        
            "questionInput": 
                "question": "This is the third Question.ΒΓ",
            ,
            "id": "qPgd261wVGizOuR1b9RT",
            "createdAt": "2021-07-07T18:46:25.203Z"
        
    ]

ExamInfo

questionsInfoQuestionsInfo 模型的ID。这是由 MongoDB 引用创建的。


    "_id": ObjectId("60e5f88159292f575c0ca17f"),
    "questionsId": [
        "aLC/QNz/AOLO9Fyj7oJT",
        "aLC/QNz/AOLO9Fyj7oJJ"
    ],
    "user": ObjectId("6087dc4c2ba7a828363c9fca"),
    "questionsInfo": ObjectId("60e5f5fce2446faa95e6eca7"),

我想使用填充到ExamInfo 模型中查找来自QuestionsInfoquestionsId 列表匹配的问题。

我该怎么做?提前致谢。

【问题讨论】:

您是否引用了您的模型。您可以为此使用.populate('questionsInfo')。或使用$lookup 我使用了填充但无法返回完全匹配的问题。 您的要求比我在questionsInfo 文档中填充 ID 存在于questionsId 中的问题。为此,您需要$lookup 你能写出查询吗?我不明白。 【参考方案1】:

以下是实现这一目标的方法。


    $lookup: 
      from: "questionsInfo",
      let: 
        qId: "$questionsInfo",
        internalQIds: "$questionsId"
      ,
      as: "questionsInfo",
      pipeline: [
        // first match question info document
        
          $match: 
            $expr: 
              $eq: [
                "$_id",
                "$$qId"
              ]
            
          
        ,
        // unwind all nested questions
        
          $unwind: "$questions"
        ,
        // match only required questions
        
          $match: 
            $expr: 
              $in: [
                "$questions.id",
                "$$internalQIds"
              ]
            
          
        ,
        // regroup
        $group: 
          _id: "$_id",
          courseName: 
            $first: "$courseName"
          ,
          user: 
            $first: "user"
          ,
          questions: 
            $push: "$questions"
          
        
      ,
      
    ]
  

现在,由于查找返回数组,您可以使用类似这样的方法从数组中取出问题信息。


  "$addFields": 
    "questionsInfo": 
      "$arrayElemAt": [
        "$questionsInfo",
        0
      ]
    
  

https://mongoplayground.net/p/lYQAUFyEUMr

【讨论】:

完美运行。非常感谢。 如何取消选择 questionsId 数组到返回的输出中?。 你能回答另一个问题吗? ***.com/questions/68178311/… 在此我想按日期对问题进行排序。

以上是关于使用从一个模型填充到另一个模型来检索数组数据的主要内容,如果未能解决你的问题,请参考以下文章

将数据从一个模型加载到另一个模型,空数组。拉拉维尔

如何从属于 UITableView 中的模型数组对象的数组中向 tableView 显示数据?

如何将数据从一个提供者模型传递到另一个提供者模型?

从 appDelegate 检索核心数据模型版本

如何在 Django 中使用 South 将数据从一个模型迁移到另一个模型?

多个 QuerySet 到另一个模型