Я пытаюсь реализовать массив ObjectId внутри схемы в Mongoose. Я искал в Интернете, и я обнаружил, что это должно работать:
import mongoose from 'mongoose';
import Schema from 'mongoose';
const UserSchema = mongoose.Schema({
nickName: {
type: String,
unique: true,
required: true,
},
follows: [{
type: Schema.Types.ObjectId, //HERE
ref: 'User',
default: []
}],
}, {
strict: true,
});
const User = mongoose.model('User', UserSchema);
export default User;или это
follows: {
type: [Schema.Types.ObjectId], // HERE
ref: 'User',
default: []
},Я знаю, что они не совсем одинаковы, но вместо того, чтобы работать в обоих случаях, у меня есть эта ошибка:
Invalid schema configuration: `ObjectID` is not a valid type within the array `follows`.
Я не знаю, почему он говорит мне, что ObjectID (с большой буквы «ID») недействителен, поскольку я ничего из этого не объявлял.
Как я могу сделать массив objectId? Мне нужен массив ObjectId по ссылке на схему «Пользователь» с людьми, за которыми следит пользователь.
[РЕДАКТИРОВАТЬ] Как упомянул Бхану Сенгар в комментарии, мне пришлось поставить «мангуст» перед схемой.
[{ type: mongoose.Schema.Types.ObjectId, ref: 'User' }]
Как сказал Халил САФАК, я удалил значение по умолчанию.
Это также не сработало, потому что у меня были конфликты между двумя импортами
import mongoose from 'mongoose';
import Schema from 'mongoose';



На самом деле ошибка не в ObjectId, а в вашей конфигурации. Вы определяете objectId в 'follows', а затем записываете массив как значение по умолчанию, но на самом деле это не тип объекта типа ObjectId, так что вот ошибка. У вас не возникнет проблем с определением следующим образом.
follows: [{
type: Schema.Types.ObjectId, //HERE
ref: 'User'
}],
или
follows: [Schema.Types.ObjectId],
В обоих определениях запрос на заполнение MongoDB будет работать.
проблему не решает, та же ошибка.
Я использовал свойство 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 в схеме. Но у меня есть один, когда я пытаюсь сделать массив ObjectId.
Если вы хотите использовать массив ObjectId, то это не проблема. Вы просто перемещаетесь внутри массива. Как и категории: [{ тип: mongoose.Schema.Types.ObjectId, ссылка: «Категория» }]
Это сработало, спасибо. Я забыл поставить "мангуст" перед "схемой". Теперь это работает. Дело в том, что он работает без «мангуста», когда это не массив, но не работает, когда это массив.
Это то, что я пробовал, прежде чем устанавливать значение по умолчанию и публиковать эту тему, но у меня все еще та же ошибка...