[英]How to get embedded document in an array in MongoDB (with Mongoose)
[英]How do I $push a value to an array within an embedded document in MongoDB using Mongoose?
看来这可能是MongoDB的未解决问题, https://jira.mongodb.org/browse/SERVER-831 ,但是我不确定是否确实有解决方案,我只是在考虑和研究其中的内容。错误道。
这是我的架构的一个子集:
var myModel = new mongoose.Schema({
arrayA: [{
subArrayA: [{
fieldA: String
}],
subArrayB: [{
fieldB: String
}]
}],
});
我想通过将值推入其中来更新subArrayA。 我尝试过以各种方式进行此操作,但没有成功。 这是最简单的尝试:
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
});
因此,现在您可以在不覆盖给定级别的整个对象的情况下进行更新。
我能够使用MongooseArray方法“ push”来工作。
req.mymodel.arrayA.id(req.params.id).subArrayA.push({fieldA:ValA});
req.mymodel.save(function (err) {
// some stuff
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.