【问题标题】:How can I populate this sort of mongoDB id data?如何填充这种 mongoDB id 数据?
【发布时间】:2021-08-26 19:25:52
【问题描述】:

我有两个架构:

AnswerSchema:{
  "_id" : ObjectId("5ebe4b26b6fe863e4084a718"),
  "userId" : ObjectId("5ebd093989cae1746c348b2d"),
  "answersArray" : [
    {
        "_id" : ObjectId("5ebe4b26b6fe863e4084a71a"),
        "questionId" : ObjectId("5ebe31b22e13a22862f32ff7"),
        "answerId" : ObjectId("5ebe31b22e13a22862f32ffb")
    },
    {
        "_id" : ObjectId("5ebe4b26b6fe863e4084a719"),
        "questionId" : ObjectId("5ebe32672e13a22862f32ffc"),
        "answerId" : ObjectId("5ebe32672e13a22862f32fff")
    }
  ],
  "__v" : 0
}

Question Schema{
  "_id" : ObjectId("5ebe31b22e13a22862f32ff7"),
  "questionNumber" : 1,
  "options" : [
    {
        "_id" : ObjectId("5ebe31b22e13a22862f32ffb"),
        "image" : "/Qusetion1/Coffee.png",
        "title" : "Coffee"
    },
    {
        "_id" : ObjectId("5ebe31b22e13a22862f32ffa"),
        "image" : "/Qusetion1/Drinks.png",
        "title" : "Drinks"
    },
    {
        "_id" : ObjectId("5ebe31b22e13a22862f32ff9"),
        "image" : "/Qusetion1/Marijuana.png",
        "title" : "Marijuana"
    },
    {
        "_id" : ObjectId("5ebe31b22e13a22862f32ff8"),
        "image" : "/Qusetion1/PreferNottoSay.png",
        "title" : "Prefer Not to Say"
    }
  ],
  "__v" : 0
}

answerArrayanswerId 字段存在于 questionSchema 的选项中 我想用与answerId 匹配的选项填充answerId

我使用的查询是:

let filter = {
    userId: req.userInfo
}
models.answers.find(filter).populate([{
        path:('answersArray.answerId'),
        model:('Question'),
        select:('options')     
    },
    {
        path:('answersArray.questionId'),
        model:('Question'),
        select:('questionNumber')
    }
]).exec((err, result) => {   
    console.log(result)
    if(err) {
        response.status(400).send({
            success: false,
            message: errorHandler.getErrorMessage(err)
        })

    } else {
        response.status(200).send({
            success: true,
            message: "User Profile",
        })
    }
})

这是给我的

{
    "_id": "5ebe4b26b6fe863e4084a718",
    "userId": "5ebd093989cae1746c348b2d",
    "answersArray": [
        {
            "_id": "5ebe4b26b6fe863e4084a71a",
            "questionId": {
                "_id": "5ebe31b22e13a22862f32ff7",
                "questionNumber": 1
            },
            "answerId": null
        },
        {
            "_id": "5ebe4b26b6fe863e4084a719",
            "questionId": {
                "_id": "5ebe32672e13a22862f32ffc",
                "questionNumber": 2                            
            },
            "answerId": null
        }
    ],
    "__v": 0
}

这是查询的结果


我期待的是

{
    "_id": "5ebe4b26b6fe863e4084a718",
    "userId": "5ebd093989cae1746c348b2d",
    "answersArray": [
        {
            "_id": "5ebe4b26b6fe863e4084a71a",
            "questionId": {
                "_id": "5ebe31b22e13a22862f32ff7",
                "questionNumber": 1
            },
            "answerId": {
                "_id" : ObjectId("5ebe31b22e13a22862f32ffb"),
                "image" : "/Qusetion1/Coffee.png",
                "title" : "Coffee"
            }
        },
        {
            "_id": "5ebe4b26b6fe863e4084a719",
            "questionId": {
                "_id": "5ebe32672e13a22862f32ffc",
                "questionNumber": 2
             },
             "answerId": {
                 "_id" : ObjectId("5ebe32672e13a22862f32fff"),
                 "image" : "/Qusetion1/Drinks.png",
                 "title" : "Drinks"
             }
        }
    ],
}

这是我对它的期望。

所以基本上我想从选项中填充字段answerId

【问题讨论】:

  • 你的问题现在又打开了。

标签: mongodb populate


【解决方案1】:

我认为错误在于以下几行:

{
    path:('answersArray.answerId'),
    model:('Question'),
    select:('options')     
}

问题中并不清楚,但answerId 不是指向答案_id?如果是这样,这应该是model:('Answer') 并删除select:('options'),因为它在答案架构中不存在

【讨论】:

    猜你喜欢
    • 2021-05-16
    • 2019-10-14
    • 1970-01-01
    • 1970-01-01
    • 2018-12-15
    • 2014-04-10
    • 1970-01-01
    • 1970-01-01
    • 2021-04-25
    相关资源
    最近更新 更多