2016-09-28 5 views
0

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レコードとオブジェクトを印刷する次のような私は、そのオブジェクトを更新しますフィールドが更新されました。 2番目のオブジェクトはオブジェクトを印刷しません。私は何が欠けていますか?解決された約束は、永続化されたオブジェクトとどう違うのですか? dataupdatedは同じである必要がありますか?

+1

'Object.find'?あなたのモデルは 'Object'という名前か、何かが欠けていますか? –

+0

それをシンプルにするために私はちょうどその方法をここに呼んだわけではありませんが、私は今混乱させてしまったことに気付きました。私は編集します – Mika

+0

あなたは最初に更新を行い、 'それから'コールバックが見つかったオブジェクトを返しますか? –

答えて

1

あなたにはいくつか問題があると思います。

変数 'updated'を2回使用しています。

var updated = _.merge(entity, updates); // declared here 
return updated.save() 
    .then(updated => { // trying to re-declare here 

もう1つの問題は、実際のオブジェクト値ではなく、「更新」プロパティを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)); 
     }); 
    } 
} 
+0

私は最初の問題ではないと思うし、実際に変数名を変更すると何も変わりません。 'findByIdAndUpdate'を使うと、実際にはフィールドをもはやマージする必要はありません。 – Mika

関連する問題