2016-06-01 1 views
0

app.jsschema.post( '検索')とschema.post( 'findOne')

Match.find({}).lean().exec(function(err, matches) {}); 
Match.findById(id).lean().exec(function(err, match) {}); 

Iは異なる経路でこれらのクエリの両方を使用します。

マッチモデル: Javaでデフォルトの日付書式は、(のような2016-05-19T13:29:07.731Z)(私はクライアント側で使用している)私が代わりにUnixタイムスタンプで上書き理由です、痛みで解析

var mongoose = require('mongoose'); 
var Schema = mongoose.Schema; 

var messageSchema = new Schema({ 
    // ... 
    message: {type: String, required: true}, 
}, { 
    timestamps: true 
}); 

var matchSchema = new Schema({ 
    // ... 
    messages: [messageSchema] 
}, { 
    timestamps: true 
}); 

matchSchema.post('find', function(result) { 
    result.forEach(function(chat) { 
     chat.messages.forEach(function(message) { 
      message.createdAt = new Date(message.createdAt).getTime(); 
      message.updatedAt = new Date(message.updatedAt).getTime(); 
     }); 
    }); 
}); 

matchSchema.post('findOne', function(result) { 
    if (result !== null) { 
     result.messages.forEach(function(message) { 
      message.createdAt = new Date(message.createdAt).getTime(); 
      message.updatedAt = new Date(message.updatedAt).getTime(); 
     }); 
    } 
}); 

var Match = mongoose.model('Match', matchSchema); 

module.exports = Match; 

これはJavaで簡単にフォーマットできます。 この問題は、findfindOneの重複コード(message.createdAt = ...とmessage.updatedAt ..)があります。 findfindByIDの両方のクエリに対してトリガするフックがありますか?だから私は一度コードを書く必要がありますか? findfindByIdのトリガーにはなりません。

答えて

1

両方のフックがすでにあなたはすべての(同様の)フックで使用されます一つの機能にそれらを組み合わせることができ、非常によく似ているので:私はそれをカバーしなければならないのでfindOneは、findByIdのトリガと確信してい

function processResult(result) { 
    if (result) { 
    if (! Array.isArray(result)) { 
     result = [ result ]; 
    } 
    result.forEach(function(chat) { 
     chat.messages.forEach(function(message) { 
      message.createdAt = new Date(message.createdAt).getTime(); 
      message.updatedAt = new Date(message.updatedAt).getTime(); 
     }); 
    }); 
    } 
} 

matchSchema.post('find', processResult); 
matchSchema.post('findOne', processResult); 

同じように。

+0

はい、そうです。しかし、とにかく、すべての異なるselect(find/findOne/findById)タイプの**フック**はありませんか? – Chris

+0

いいえ、それらをすべて捕まえる単一のフックがないようです。 – robertklep

関連する問題