mongodb 将 object 添加到 object 的数组中

mongodb add objects into array of object

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

这是我组的模型collection

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
                }]

我想将元素添加到 object 的 'usersAttempted' 数组中。 'answers' 部分有问题。问题是有很多问题的答案,但我只得到它添加 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
                }
            }}});

Answers 是 objects

的数组

感谢您的帮助。

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

编辑:#2

我设法将 object 的数组添加到 collection 中,但它是通过索引完成的。

        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 个 object 数组的方法。

当你尝试时会发生什么:

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

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