Node.js Mongoose中如何将项目推送到模型的数组字段
我有两个这样的收藏:Node.js Mongoose中如何将项目推送到模型的数组字段,node.js,mongodb,express,mongoose,Node.js,Mongodb,Express,Mongoose,我有两个这样的收藏: { "_id" : ObjectId("5e61f34358a41b7ee0e6fa40"), "lessonId" : "lesson1", "vocaList" : [ { "_id" : ObjectId("5e61f5900b73daa104e2ee75"), "word" : "word1", "type" : "type1",
{
"_id" : ObjectId("5e61f34358a41b7ee0e6fa40"),
"lessonId" : "lesson1",
"vocaList" : [
{
"_id" : ObjectId("5e61f5900b73daa104e2ee75"),
"word" : "word1",
"type" : "type1",
"meaning" : "meaning",
"sente" : "sente",
"semean" : "semean",
"sug" : "sug"
}
],
"__v" : 0
}
const vocaSchema={
字:字符串,
类型:字符串,
意思:字符串,
弦乐,
semean:字符串,
sug:String
};
const Voca=mongoose.model('Voca',vocaSchema);
常量setVocaSchema={
莱索尼德:弦,
主唱:[主唱模式]
};
const SetVoca=mongoose.model('SetVoca',setVocaSchema);
现在我想将一个新的Voca
推送到vocaList
字段,这是我的代码:
app.post('/lesson/add voca/:lessonID',(请求、回复)=>{
const lessonID=req.params.lessonID;
const newVoca=新Voca({
word:req.body.addWord,
类型:req.body.addType,
含义:req.body.add含义,
句子:req.body.addStc,
semean:req.body.addStcm,
sug:req.body.addSggt
});
console.log(newVoca);
SetVoca.findOneAndUpdate({lessonId:lessonId},{$push:{vocaList:newVoca}},(err,result)=>{
如果(!err){
控制台日志(结果);
res.redirect('/lesson/add voca/'+lessonID);
}否则{
控制台日志(结果);
res.render(“错误”);
}
});
});
结果是未定义:(
我不知道如何修复它。任何人,请帮助我,非常感谢!你需要推一个对象,而不是猫鼬模型
您还需要使用mongoose.schema
const mongoose=require(“mongoose”);
const vocaSchema=新的mongoose.Schema({
字:字符串,
类型:字符串,
意思:字符串,
弦乐,
semean:字符串,
sug:String
});
//const Voca=mongoose.model(“Voca”,vocaSchema);
const setVocaSchema=new mongoose.Schema({
莱索尼德:弦,
主唱:[主唱模式]
});
const SetVoca=mongoose.model(“SetVoca”,setVocaSchema);
module.exports=SetVoca;
在你的邮寄路线上:
app.post(“/lesson/add voca/:lessonID)”,(请求、回复)=>{
const lessonID=req.params.lessonID;
常数newVoca={
word:req.body.addWord,
类型:req.body.addType,
含义:req.body.add含义,
句子:req.body.addStc,
semean:req.body.addStcm,
sug:req.body.addSggt
};
console.log(newVoca);
SetVoca.findOneAndUpdate(
{lessonId:lessonId},
{$push:{歌手:newVoca}},
{新:正确},
(错误,结果)=>{
如果(!err){
控制台日志(结果);
res.redirect(“/lesson/add voca/”+lessonID);
}否则{
控制台日志(err);
res.render(“错误”);
}
}
);
});
测试:
假设我们的文档中有一个空的歌手
数组:
{
"_id": "5e61f34358a41b7ee0e6fa40",
"lessonId": "lesson1",
"vocaList": [],
"__v": 0
}
当我们使用此url。/lesson/add voca/lesson1
和此请求正文发送POST请求时:
"addWord": "word1",
"addType": "type1",
"addMeaning": "meaning",
"addStc": "sente",
"addStcm": "semean",
"addSggt": "sug"
}
结果如下:
{
"_id" : ObjectId("5e61f34358a41b7ee0e6fa40"),
"lessonId" : "lesson1",
"vocaList" : [
{
"_id" : ObjectId("5e61f5900b73daa104e2ee75"),
"word" : "word1",
"type" : "type1",
"meaning" : "meaning",
"sente" : "sente",
"semean" : "semean",
"sug" : "sug"
}
],
"__v" : 0
}
@ManhCuong我刚刚更新了答案,我也修改了你的模式。你能这样尝试吗?我刚像你一样编辑了我的代码,但结果是null
@ManhCuong你能检查你的集合是否更新了吗?我检查过了,它甚至没有创建setvoca集合,我确保在使用y构建之前清理了数据库我们的代码:(@manhcung)好的,我试试这个