为啥 Mongoose 插入 null 作为子文档数组的最后一个元素?
Posted
技术标签:
【中文标题】为啥 Mongoose 插入 null 作为子文档数组的最后一个元素?【英文标题】:Why does Mongoose insert null as the last element of the subdocuments array?为什么 Mongoose 插入 null 作为子文档数组的最后一个元素? 【发布时间】:2021-10-28 15:38:30 【问题描述】:我有一个带有子文档数组的 Mongoose 架构,如下所示:
const cardsSchema = new mongoose.Schema(
cards: [
front: String,
back: String,
nameOfSuperset: String,
nameOfSet: String,
,
],
);
const Cards = mongoose.model("Cards", cardsSchema);
我已经从上述模型创建了一个文档,并且我在这个文档的子文档数组中推送了几个对象:
exports.createCards = async (req, res, next) =>
const userCards = await Cards.findById(req.user.cards);
for (let i = 0; i < req.body.cards.length; i++)
userCards.cards.push(req.body.cards[i]);
const created = await userCards.save();
console.log(created);
res.status(201).json(
status: "success",
);
;
当我 console.log 这个保存的文档,或者在 MongoDB Compass 中查看它时,子文档数组末尾的文档中有 null。我不会在本文档中推送任何空对象。我从中获取要推送的对象(req.body.cards)的原始数组没有空元素或空对象。我有控制台。记录它。
这个 null 是什么,我怎样才能摆脱它?
【问题讨论】:
您可以将updateOne
与$push
和$each
运算符一起使用以将文档推送到数组中。 refer example.
用 forEach 替换 for 并尝试
@mohammadNaimi 它奏效了。谢谢你。我只是好奇 for 循环有什么问题?
@turivishal await Cards.updateOne( _id: req.user.cards , $push: cards: $each: req.body.cards );
有效。感谢您的评论。
如果可以做出回答并接受它?如果问题已经解决了它来自循环
【参考方案1】:
用forEach
替换for
循环
req.body.cards.forEach(item=>
userCards.cards.push(item)
)
【讨论】:
以上是关于为啥 Mongoose 插入 null 作为子文档数组的最后一个元素?的主要内容,如果未能解决你的问题,请参考以下文章