Я думаю, что когда вы определяете String
, вы определяете объект. Поэтому вам нужно использовать .equals()
. Когда вы используете примитивные типы данных, вы используете ==
, но с String
(и любым объектом) вы должны использовать .equals()
.
Я использовал свойство mongooose Populate, чтобы проверить мой код. Это поможет вам понять.
const mongoose = require('mongoose');
const timestamps = require('mongoose-timestamp');
const cateorySchema = new mongoose.Schema({
category_name: {
type: String,
trim: true,
required: true,
},
active: {
type: Boolean,
default: true,
}
});
cateorySchema.plugin(timestamps); // automatically adds createdAt and updatedAt timestamps
module.exports = mongoose.model('Category',cateorySchema);
'use strict'
const mongoose = require('mongoose');
const timestamps = require('mongoose-timestamp');
const subCategorySchema = new mongoose.Schema({
categories:{ type: mongoose.Schema.Types.ObjectId, ref: 'Category' },
subcategorytitle:{
type:String,
trim:true,
required: true
},
active: {
type: Boolean,
default: true
}
});
subCategorySchema.plugin(timestamps); // automatically adds createdAt and updatedAt timestamps
module.exports = mongoose.model('Subcategory',subCategorySchema);
Надеюсь, это поможет вам. Если у вас есть какие-либо сомнения, дайте мне знать.
На самом деле ошибка не в ObjectId, а в вашей конфигурации. Вы определяете objectId в 'follow', а затем записываете массив как значение по умолчанию, но на самом деле это не тип объекта ObjectId, так что здесь ошибка. У вас не будет проблем с определением следующим образом.
follows: [{
type: Schema.Types.ObjectId, //HERE
ref: 'User'
}],
или
follows: [Schema.Types.ObjectId],
В обоих определениях будет работать запрос заполнения MongoDB.