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)好的,我试试这个