使用 findOne 更新 mongoDB 文档中的子字段并保存
Posted
技术标签:
【中文标题】使用 findOne 更新 mongoDB 文档中的子字段并保存【英文标题】:Updating a subfield in a mongoDB document using findOne and save 【发布时间】:2013-10-10 12:40:20 【问题描述】:我正在尝试更新 mongoDB 文档中的特定子字段,并决定首先找到有问题的对象,然后保存更新的对象。出于某种原因,保存选项似乎忽略了我的更改。
我的集合中有一个对象,它符合以下架构:
var tschema= mongoose.Schema(
a: Object
)
var t = db.model('tongoose',tschema);
t.findOne(,function(err,obj)
console.log(obj.a); //yields ['banana',3]
obj.a[1]=1; //to make ['banana',1]
console.log(obj); //yields ['banana',1]
obj.save(function(err,real)
console.log(real); //yields ['banana',1]
);
);
但是当我回到 mongoDB 并查找保存的对象时,它从未显示任何更改。你能发现我做错了什么吗?
非常感谢。
【问题讨论】:
【参考方案1】:由于您的架构将a
定义为通用对象,因此该字段被Mongoose 视为Mixed
类型,您需要通过调用markModified
或save
将其标记为已更改,否则save
将忽略更改。
obj.markModified('a');
obj.save(function(err,real) ...
请参阅文档的this page 上对Mixed
类型的讨论。
【讨论】:
以上是关于使用 findOne 更新 mongoDB 文档中的子字段并保存的主要内容,如果未能解决你的问题,请参考以下文章