node.js - 无法推送 mongo 数组中的项目
问题描述
每次我尝试推送一个新元素时,我都无法将项目推送到 MongoDB 数组中,它会创建一个空对象,我不知道为什么,我已经使用了
Collection.Array.push({element})& Collection.save()
但我想不出解决办法
这是我的架构
const Schema = mongoose.Schema;
var ParticipantSchema = new Schema({
nom:{Type:String},
prenom:{Type:String},
email:{Type:String}
})
var CompetitionSchema = new Schema({
nom:String,
date:Date,
place:String,
participant :[ParticipantSchema]
})
module.exports = mongoose.model("Competition",CompetitionSchema);
这是我的功能
exports.addParticipant=function(req,res){
var newParticipant={
"nom":req.body.nom,
"prenom":req.body.prenom,
"email":req.body.email
}
Competition.updateOne(
{ _id:req.body.id},
{ $push: { participant: newParticipant } },
(err,done)=>{
return res.json(done)
}
);
}
结果始终是一个空对象,如下所示
{
"_id": "5ded0eeb85daa100dc5e57bf",
"nom": "Final",
"date": "2019-01-01T23:00:00.000Z",
"place": "Sousse",
"participant": [
{
"_id": "5ded0eeb85daa100dc5e57c0"
},
{
"_id": "5dee3c1b08474e27ac70672e"
}
],
"__v": 0
}
解决方案
您正在使用数组中的另一个架构。这会产生所谓的子文档 ( https://mongoosejs.com/docs/subdocs.html )。Mongoose 默认不填充子文档。所以你看到的只是_id
. 您可以使用 populate 方法详细查看所有子文档。(https://mongoosejs.com/docs/populate.html)。
例子 :
Competition.
find({}).
populate('participant').
exec(function (err, comps) {
//
});
您可以populate
在模型或文档上使用。要填充文档,请查看https://mongoosejs.com/docs/api.html#document_Document-populate。还有一个auto-populate
插件可用,npm
但在大多数情况下没有必要:https ://www.npmjs.com/package/mongoose-autopopulate 。
推荐阅读
- r - 从 RC 类方法打印时未使用的参数错误
- r - 使用 dplyr 和条件格式从字符串构造常微分方程
- r - 我可以在没有 R studio 的情况下使用 R 吗?
- c# - 如何获取 html 输入按钮以正确显示 resource.resx 键/值条目?
- java - 显式类型转换,派生类数组
- parsing - 有没有办法在 python 中解析一个 .txt 文件,让用户给出一个词来解析?
- python - 如何从熊猫数据框列中删除字符串值?
- sql - pandas read_sql 将 NULL 导入为 0
- r - 为什么在 ggplot2 中运行相同的注释函数对其他人有用但对我抛出错误(审美长度)?
- netsuite - 在 NetSuite 保存的搜索中提取子字符串