【发布时间】:2021-03-22 00:43:57
【问题描述】:
我更改了数组的顺序,然后填充不起作用。它仍然适用于我没有尝试更新的文档。
我有一个分段模型,里面有 preguntas
分段模型
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”的“Seccion”文档如下所示:
{
"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 atlas 中更改了顺序):
{
"preguntas": [
"5fb0a48ccb68c44c227a0433",
"5fb0a48ccb68c44c227a0432"
],
"_id": "5fb0a50fcb68c44c227a0436",
"titulo": "Seccion 2",
"__v": 4
}
但是当我尝试使用 mongoose 的 "populate()" 方法时,只有一个 "preguntas ids" 或没有填充(仅在 " pregunta”以 32 结尾的 id 被填充):
{
"preguntas": [
{
"_id": "5fb0a48ccb68c44c227a0432",
"titulo": "Pregunta 3",
"__v": 0
}
],
"_id": "5fb0a50fcb68c44c227a0436",
"titulo": "Seccion 2",
"__v": 4
}
所以我的猜测是填充方法无法正常工作,但它确实适用于我没有尝试更改“preguntas”内部的“preguntas”顺序的其他“Seccion”文档大批。下面是使用“populate”方法的代码:
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 });
}
});
让填充工作真的很难,非常感谢任何人的帮助
【问题讨论】:
标签: mongodb mongoose mongoose-populate