如何在mongoose中进行更新?

6

我是一个新手,正在学习Mongoose/nodejs,我在尝试更新数组中的数组时遇到了困难。

这是模式:

var County = new Schema({
_id                 : Schema.ObjectId,
name                : String,
biggestCity         : String
});

var Country = new Schema({
_id                 : Schema.ObjectId,
name                : String,
counties                : {type: [County], ref: "County"}
});

var Continent = new Schema({
    _id       : Schema.ObjectId,
    countries : {type: [Country], ref: "Country"},
});

这是我一直在尝试的更新代码:

var continents = mongoose.model("Continent");
var update = { "countries.counties.name": newName, "countries.counties.biggestCity": newBiggestCity };
var conditions = { "_id": countryId, "countries.name": countryName, "countries.counties.name": countyName };
var options = { multi: false }; 
wagers.update(conditions, update, options, function(err, numAffected) {
    //callback code...
});

在进行这个操作时,err中的错误信息显示“无法使用字符串字段名'counties'将数组追加到数组”。这是什么意思?我做错了什么吗?
1个回答

1

您应该将子对象定义为另一个模式,而不仅仅是一些匿名对象的列表。(参考.)

尝试将Country定义为单独的模式,将其嵌套在Continent中,然后进行更新。


好的。有没有其他方法可以更新嵌套数组,而不必重新定义模式? - user1379417
@tremolo:也许有,也许没有(我的Mongoose技能还不够强),但我认为为“Country”定义一个模式是一个好习惯。 - Asherah
已解决!更新参数应该只指定要更新的属性为“name”,而不是“countries.counties.name”。 - user1379417

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接