Массив схемы NodeJS/Mongoose ObjectId

Я пытаюсь реализовать массив 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';
Структурированный массив Numpy
Структурированный массив Numpy
Однако в реальных проектах я чаще всего имею дело со списками, состоящими из нескольких типов данных. Как мы можем использовать массивы numpy, чтобы...
T - 1Bits: Генерация последовательного массива
T - 1Bits: Генерация последовательного массива
По мере того, как мы пишем все больше кода, мы привыкаем к определенным способам действий. То тут, то там мы находим код, который заставляет нас...
Что такое деструктуризация массива в JavaScript?
Что такое деструктуризация массива в JavaScript?
Деструктуризация позволяет распаковывать значения из массивов и добавлять их в отдельные переменные.
0
0
4 479
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

На самом деле ошибка не в ObjectId, а в вашей конфигурации. Вы определяете objectId в 'follows', а затем записываете массив как значение по умолчанию, но на самом деле это не тип объекта типа ObjectId, так что вот ошибка. У вас не возникнет проблем с определением следующим образом.

follows: [{
    type: Schema.Types.ObjectId, //HERE
    ref: 'User'
  }],

или

follows: [Schema.Types.ObjectId],

В обоих определениях запрос на заполнение MongoDB будет работать.

Это то, что я пробовал, прежде чем устанавливать значение по умолчанию и публиковать эту тему, но у меня все еще та же ошибка...

hazer 25.02.2019 13:23

проблему не решает, та же ошибка.

Murat Serdar Akkuş 04.06.2019 19:29
Ответ принят как подходящий

Я использовал свойство 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.

hazer 25.02.2019 15:51

Если вы хотите использовать массив ObjectId, то это не проблема. Вы просто перемещаетесь внутри массива. Как и категории: [{ тип: mongoose.Schema.Types.ObjectId, ссылка: «Категория» }]

Bhanu Sengar 25.02.2019 16:34

Это сработало, спасибо. Я забыл поставить "мангуст" перед "схемой". Теперь это работает. Дело в том, что он работает без «мангуста», когда это не массив, но не работает, когда это массив.

hazer 25.02.2019 20:54

Другие вопросы по теме