猫鼬没有坚持返回的物体

时间:2016-09-28 15:02:39

标签: node.js mongodb mongoose

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打印对象,并更新记录字段。第二个打印对象没有。我错过了什么?解决的承诺如何与持久对象不同?我不应该dataupdated相同吗?

1 个答案:

答案 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));
      });
   }
}