В настоящее время я запрашиваю MongoDB с помощью Mongoose для поиска определенной категории с определенным ObjectID (например, 5ca510c87cf5db0017a59d5d), а затем подсчитываю документы в процессе с этой конкретной категорией. Однако мне интересно, есть ли лучший способ сделать это, который может вместо этого запрашивать поле name
(например, «Основной») категории, таким образом, он может работать в любой другой базе данных без изменения кода для определенного идентификатора.
Это приложение Node.js, в котором Express используется для MVC, а Mongoose — для ODM.
Я упоминал функцию populate
Mongoose в документации, но не могу найти хорошую аналогию.
Модель категории:
var CategorySchema = new Schema({
name: {type: String, required: true, min: 3, max: 100}
});
Модель процесса:
var ProcessSchema = new Schema(
{
name: {type: String, required: true},
machine: {type: Schema.Types.ObjectId, ref: 'Machine', required: true},
summary: {type: String, required: true},
serial_number: {type: String, required: true},
category: [{type: Schema.Types.ObjectId, ref: 'Category'}]
}
);
Контроллер процесса:
exports.index = function(req, res) {
async.parallel({
...
process_category_primary_count: function(callback) {
Process.countDocuments({category: '5ca510c87cf5db0017a59d5d'},callback);
},
process_category_intermediate_count: function(callback) {
Process.countDocuments({category: '5ca510f57cf5db0017a59d5e'},callback);
},
process_category_finishing_count: function(callback) {
Process.countDocuments({category: '5ca511017cf5db0017a59d5f'},callback);
},
...
}, function(err, results) {
res.render('index', { title: 'Dashboard Home',
error: err,
data: results });
});
};
По умолчанию запрос find
all для процесса даст такой результат:
{ category: [ 5c9d48508ee1353a2786c7d0 ],
_id: 5ca3ca9a9743b52602d88c57,
name: 'Milling-Detailing',
machine: 5c9e407c6e0b26209b55dbbd,
summary: 'Detailing pass for each object.',
serial_number: '1002',
__v: 0 }
Итак, по сути: я хотел бы использовать «имя» категории, а не «идентификатор» для поиска и подсчета коллекции процессов.