【问题标题】:mongodb add objects into array of objectmongodb将对象添加到对象数组中
【发布时间】:2021-03-03 23:15:00
【问题描述】:

我正在尝试将元素添加到对象数组中,但我在添加超过 1 个对象时遇到问题。

这是我的群组收藏的模型

const userSchema = mongoose.Schema({
name: {type: String, required: true},
password: {type: String, required: true},
description: {type: String, required: true},
scope: String,
groupTeacher: {
    type: mongoose.Types.ObjectId,
    ref: 'users',
},
quizzes:[
    {
        _id: mongoose.Types.ObjectId,
        name: String,
        tier: Number,
        category: String,
        questions:[
            {
                _id: mongoose.Types.ObjectId,
                title: String,
                question: String,
                correctAnswer: String,
                answer1: String,
                answer2: String,
                answer3: String,
                answer4: String
            }
        ],
        usersAttempted:[
            {
                _id: {
                    type: mongoose.Types.ObjectId,
                    ref: 'users',
                },
                //userEmail: String,
                correctAnswers: Number,
                wrongAnswers: Number,
                answers: [{
                    questionTitle: String,
                    correctAnswer: String,
                    usersAnswer: String
                }]

我想将元素添加到“usersAttempted”对象数组中。 我对“答案”部分有疑问。问题是有很多问题的答案,但我只能添加 1 个问题的答案。

我就是这样做的。

    const result = await groupsModel.updateOne({
        "_id": groupId,
        "quizzes._id": quizId,
        "quizzes.usersAttempted._id": {$ne: userId}
    }, 
    {
        $addToSet:{
            "quizzes.$.usersAttempted":{
                _id:userId,
                correctAnswers: questionsCorrect,
                wrongAnswers:   questionsWrong,
                answers:{
                    questionTitle:  answers[0].questionTitle,
                    correctAnswer:  answers[0].correctAnswer,
                    usersAnswer:    answers[0].usersAnswer
                }
            }}});

答案是一个对象数组

感谢您的所有帮助。

编辑:#1
小解释: 我有一个对象数组,我想将它们添加到“usersAttempted”,但添加超过 1 个答案时遇到问题。

编辑:#2

我设法将对象数组添加到集合中,但它是通过索引完成的。

        const result = await groupsModel.updateOne({
        "_id": groupId,
        "quizzes._id": quizId,
        "quizzes.usersAttempted._id": {$ne: userId}
    }, 
    {
        $addToSet:{
            "quizzes.$.usersAttempted":{
                _id:userId,
                correctAnswers: questionsCorrect,
                wrongAnswers:   questionsWrong,
                answers:[{
                    questionTitle:  answers[0].questionTitle,
                    correctAnswer:  answers[0].correctAnswer,
                    usersAnswer:    answers[0].usersAnswer
                },
                {
                    questionTitle:  answers[1].questionTitle,
                    correctAnswer:  answers[1].correctAnswer,
                    usersAnswer:    answers[1].usersAnswer
                },
                {
                    questionTitle:  answers[2].questionTitle,
                    correctAnswer:  answers[2].correctAnswer,
                    usersAnswer:    answers[2].usersAnswer
                }]
                    
            }}});

现在我想找到一种方法来添加一个包含 x 个对象的数组。

【问题讨论】:

  • 为什么只添加一个答案而不是整个数组?
  • 因为我不确定如何添加整个数组:D 这就是问题的原因
  • 发布实际代码而不是代码图像会很有帮助。使用编辑器工具栏上的 {} 按钮将其指定为代码块
  • 我试图在网上找到如何添加整个数组。但我什么也找不到。

标签: javascript arrays mongodb express mern


【解决方案1】:

当你尝试时会发生什么:

        $addToSet:{
        "quizzes.$.usersAttempted":{
            _id:userId,
            correctAnswers: questionsCorrect,
            wrongAnswers:   questionsWrong,
            answers                    
        }}});

在我看来,您将添加整个答案数组...

【讨论】:

  • 好的,这行得通。我之前尝试过,但问题是字段名称与对象中的名称相比是不同的。之前是“answers.title”(对象)和“questionTitle”(集合)。我更改了名称,因此它们是相同的,并且效果很好。谢谢你。我想这是你最容易解决的问题:D
猜你喜欢
  • 2016-11-10
  • 2021-11-06
  • 2020-05-11
  • 1970-01-01
  • 2022-01-13
  • 2018-09-06
  • 1970-01-01
  • 2012-07-01
  • 2022-01-16
相关资源
最近更新 更多