【发布时间】:2014-04-07 22:02:39
【问题描述】:
我有这个:
exports.deleteSlide = function(data,callback){
customers.findOne(data.query,{'files.$':1},function(err,data2){
if(data2){
console.log(data2.files[0]);
data2.files[0].slides.splice((data.slide-1),1);
data2.files[0].markModified('slides');
data2.save(function(err,product,numberAffected){
if(numberAffected==1){
console.log("manifest saved");
var back={success:true};
console.log(product.files[0]);
callback(back);
return;
}
});
}
});
}
我收到“清单已保存”消息和一个回调,success 是 true。
当我第一次找到数据时执行console.log,并在我保存数据后将其与console.log 进行比较,它看起来就像我所期望的那样。我没有收到任何错误。
但是,当我在运行此代码后查看数据库时,似乎什么都没有改变。我应该删除的元素仍然出现?
这里有什么问题?
编辑:
对于我的查询,我执行{'name':'some string','files.name':'some string'},如果找到对象,我会得到一个包含一个对象的files 数组。
我猜这是一个子文档。
我环顾四周,它说保存子文档的规则与保存整个集合的规则不同,或者更确切地说,子文档仅在保存根对象时应用。
我一直在通过抓取整个根对象来解决这个问题,然后我执行循环以找到我想要的实际子文档,并且在我操作它之后,我保存整个对象。
我可以避免这样做吗?
【问题讨论】:
-
Mongoose automatically creates an _id field 如果你没有指定一个,那么这不应该是问题。