Mongo:3.2.1。
我有一个如此定义的模型:
var MySchema = new Schema(
{
....
records: {type: Array, "default": []};
我首先根据该模式创建一个没有记录字段的对象,并将其正确添加到数据库中。然后我更新该对象:
客户端
angular.extend(this.object.records, [{test: 'test'}]);
this.Service.update(this.object);
服务器(省略无问题的代码)
function saveUpdates(updates) {
return function(entity) {
var updated = _.merge(entity, updates);
return updated.save()
.then(updated => {
console.log(updated);
Model.find({_id: updated._id}).then((data)=> console.log(data));
return updated;
});
};
}
第一个console.log打印对象,并更新记录字段。第二个打印对象没有。我错过了什么?解决的承诺如何与持久对象不同?我不应该data
和updated
相同吗?
答案 0 :(得分:1)
我认为你有几个问题。
您正在使用变量'updated'两次。
var updated = _.merge(entity, updates); // declared here
return updated.save()
.then(updated => { // trying to re-declare here
另一个问题可能是您尝试将'updates'属性与mongo对象合并而不是实际的对象值。尝试在mongo对象上调用.toObject()来获取数据。
function saveUpdates(updates) {
return function(entity) {
// call .toObject() to get the data values
var entityObject = entity.toObject();
// now merge updates values with the data values
var updated = _.merge(entityObject, updates);
// use findByIdAndUpdate to update
// I added runValidators in case you have any validation you need
return Model
.findByIdAndUpdate(entity._id, updated, {
runValidators: true
})
.exec()
.then(updatedEntity => {
console.log(updatedEntity);
Model.find({_id: entity._id})
.then(data => console.log(data));
});
}
}