Javascript 如何使用Mongoose将值推送到MongoDB中嵌入文档的数组中?

Javascript 如何使用Mongoose将值推送到MongoDB中嵌入文档的数组中?,javascript,node.js,mongodb,mongoose,mongodb-query,Javascript,Node.js,Mongodb,Mongoose,Mongodb Query,这似乎是MongoDB的一个公开问题,但我不确定是否真的有解决方案,我只是在以错误的方式思考和研究问题 以下是我的模式的一个子集: var myModel = new mongoose.Schema({ arrayA: [{ subArrayA: [{ fieldA: String }], subArrayB: [{ fieldB: String }] }], }); 我想通过将一个值推入子阵列来更新它。我尝试过各种方

这似乎是MongoDB的一个公开问题,但我不确定是否真的有解决方案,我只是在以错误的方式思考和研究问题

以下是我的模式的一个子集:

var myModel = new mongoose.Schema({

  arrayA: [{
    subArrayA: [{
        fieldA: String
    }],
    subArrayB: [{
        fieldB: String
    }]
  }],

});
我想通过将一个值推入子阵列来更新它。我尝试过各种方法,但都没有成功。这是最简单的尝试:

myModel.findByIdAndUpdate(req.mymodel.arrayA.id(req.params.id), {
        $push: {
            subArrayA: {
                fieldA: valA
            }
        }
}, function(err) {
     // some stuff
});
直接推送到arrayA时,此操作效果良好。例如,下面的代码以我希望的方式执行—将值推入arrayA:

myModel.findByIdAndUpdate(req.mymodel.id, {
    $push: {
        arrayA: {
            fieldA: valA
        }
    }
}, function(err) {
     // some stuff
});

看来你在找我。这是一种指定对象的子元素而不指定整个对象的方法

但您确实指定了一个实际模型,您的模式是不是:

var Model = mongoose.model( "Model", myModel );
mongoose.connect('mongodb://localhost/test');

Model.findByIdAndUpdate(req.mymodel.arrayA.id(req.params.id), {
        "$push": {
            "arrayA.subArrayA": {
                "fieldA": valA
            }
        }
}, function(err) {
     // some stuff
});

因此,现在您可以在不覆盖给定级别的整个对象的情况下对更新进行注释。

我能够使用MongoosArray方法“push”实现这一点

req.mymodel.arrayA.id(req.params.id).subArrayA.push({fieldA:ValA});

req.mymodel.save(function (err) {
    // some stuff
});

谢谢你的快速回复。我在前面遇到了点符号,并尝试了您上面建议的方法。文档没有更新,我也没有收到错误。我在想我可能必须修改findByIDAndUpdate中的第一个参数,因为我在$push中引用arrayA,并在find参数中以它为目标…不确定这是什么样子或者是否有必要。@Jaytella什么错误?这与您指定的结构匹配,因此错误一定与其他内容有关。我没有收到错误。文档未更新,未引发任何错误。//我引用的某些内容正在执行,但该条目没有出现在数据库中。@Jaytella您确实定义了一个模型吗?你真的打电话给mogoose.connect了吗?您是否知道,默认情况下,模型名称为plauralize?因此,在这种情况下,集合将是模型。请看额外内容。是的。我发布的最后一段代码与应用程序的其他部分一样正常工作。