app.jsschema.post ('발견')와 schema.post ('findOne')
Match.find({}).lean().exec(function(err, matches) {});
Match.findById(id).lean().exec(function(err, match) {});
나는 다른 경로에 이러한 쿼리를 모두 사용합니다.
경기 - 모델 :
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;
기본 날짜 형식을 구문 분석은 (같은 2016-05-19T13:29:07.731Z
가) (나 클라이언트 측에서 사용) 자바 고통은, 즉 내가 대신 유닉스 타임 스탬프를 덮어 쓸 이유 이것은 Java로 포맷하기 쉽습니다. 이 문제는 find
및 findOne
에 대해 중복 코드 (message.createdAt
= ... 및 message.updatedAt
..)가 있습니다. find
및 findByID
쿼리에 대한 트리거가 있습니까? 따라서 코드를 한 번만 작성하면됩니까? find
은 findById
을 트리거하지 않으므로 나는 그 적용해야하므로 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);
: 두 후크가 이미 매우 유사하기 때문에
예, 가능합니다. 그러나 어쨌든, 모든 다른 select (find/findOne/findById) 유형에 대해 ** hook **이 없습니까? – Chris
아니요, 모든 것을 잡을 단일 후크가없는 것 같습니다. – robertklep