Обновление массива Mongodb только для указанных полей c - PullRequest
0 голосов
/ 13 марта 2020

У меня есть json массив reorderList для topi c:

const reorderList = [
    { _id: '5e6b419c76a16d5c44d87132', order: 0 },
    { _id: '5e6b41a276a16d5c44d87139', order: 1 },
    { _id: '5e6b41a776a16d5c44d87140', order: 2 }
]

И моя TopicSchema выглядит так:

var TopicSchema = new Schema({
    topicTitle: String,
    topicQuestion: [
        {           
            questionTitle: String,
            answer: String,
            order: Number
        }
    ]
}

Сейчас Я хочу обновить свои топи c вопросы порядок на основе _id . *1012*.

в reorderList. Но приведенное ниже утверждение заменит все вещи из topicQuestion (например, questionTitle и ответ будет удален)

Topic.findOneAndUpdate(
    { '_id': topicId },
    { $set: { 'topicQuestion': reorderList } }, //replaces here
    { upsert: true },
    function (err, response) {
         ...
    });

Как обновить его на основе reorderList, а также сохранить исходные данные в topicQuestion?

1 Ответ

0 голосов
/ 13 марта 2020

Используемая схема плохо спроектирована. Здесь вы можете создать еще одну схему, TopicQuestionSchema и поместить ref в топи c, к которой она принадлежит.

var TopicQuestionSchema = new Schema({          
    questionTitle: String,
    answer: String,
    order: Number,
    topic: {type: ObjectId, ref: 'Topic'} // the name of your model
}

Таким образом, вы все еще можете отслеживать топи c вопросы принадлежат и могут легко обновлять заказ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...