app.jsschema.post ('найти') и schema.post ('findOne')
Match.find({}).lean().exec(function(err, matches) {});
Match.findById(id).lean().exec(function(err, match) {});
Я использую оба этих запросов по разным трассам.
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 (который я использую на стороне клиента) является боль, поэтому я вместо того, чтобы перезаписать его с меткой времени Unix , который легко форматировать на Java. Проблема с этим, у меня есть дубликат кода (message.createdAt
= ... и message.updatedAt
..) для find
и findOne
. Есть ли крючок, который срабатывает для обоих запросов find
и findByID
? Значит, мне нужно написать только один код? Потому что find
не запускается для findById
.
Да, это будет сделано. Но так или иначе, нет ли ** hook ** для всех типов select (find/findOne/findById)? – Chris
Нет, похоже, нет ни одного крючка, который поймает все это. – robertklep