Я меняю порядок массива, а затем заполняю его, но это не работает. Он по-прежнему работает с документами, которые я не пытался обновить.
У меня есть секционная модель с прегунтами внутри.
СЕКЦИОННАЯ МОДЕЛЬ
const Schema = mongoose.Schema;
const seccionSchema = new Schema({
titulo: { type: String },
preguntas: [
{
type: Schema.Types.ObjectId,
ref: 'Pregunta',
},
],
});
МОДЕЛЬ ПРЕГУНТА
const Schema = mongoose.Schema;
const preguntaSchema = new Schema({
titulo: { type: String, required: true },
});
Документ раздела с 2 preguntas выглядит примерно так:
{
"preguntas": [
"5fb0a48ccb68c44c227a0432",
"5fb0a48ccb68c44c227a0433"
],
"_id": "5fb0a50fcb68c44c227a0436",
"titulo": "Seccion 2",
"__v": 3
}
Что я хочу сделать, так это изменить порядок в массиве preguntas, чтобы _ids в конечном итоге были [33, 32] вместо [32, 33] (последние две цифры _ids). Я могу обновить с помощью метода .save() или .findOneAndUpdate(). Вот код, использующий findOneAndUpdate:
router.put('/:id', async (req, res) => {
const seccionId = req.params.id;
try {
const seccion = await Seccion.findOneAndUpdate(
{ _id: seccionId },
{ preguntas: ['5fb0a48ccb68c44c227a0433', '5fb0a48ccb68c44c227a0432'] },
{ new: true }
);
res.json(seccion);
} catch (err) {
res.json({ message: err });
}
});
Результат работает (и порядок изменен в атласе mongo):
{
"preguntas": [
"5fb0a48ccb68c44c227a0433",
"5fb0a48ccb68c44c227a0432"
],
"_id": "5fb0a50fcb68c44c227a0436",
"titulo": "Seccion 2",
"__v": 4
}
Но когда я пытаюсь использовать метод populate() мангуста, заполняется только один из идентификаторов preguntas или не заполняется ни один (ниже заполняется только pregunta с идентификатором, заканчивающимся на 32 ):
{
"preguntas": [
{
"_id": "5fb0a48ccb68c44c227a0432",
"titulo": "Pregunta 3",
"__v": 0
}
],
"_id": "5fb0a50fcb68c44c227a0436",
"titulo": "Seccion 2",
"__v": 4
}
Итак, я предполагаю, что метод заполнения работает неправильно, но он работает с другими документами раздела, где я не пытался изменить порядок прегунтов внутри массива. Вот код, использующий метод заполнения:
router.get('/:id', async (req, res) => {
const seccionId = req.params.id;
try {
const seccion = await Seccion.findById(seccionId).populate('preguntas');
res.json(seccion);
} catch (err) {
res.json({ message: err });
}
});
Было очень трудно заставить работать заполнение, я очень ценю чью-либо помощь