Массив схемы NodeJS / Mongoose с ObjectId - PullRequest
0 голосов
/ 25 февраля 2019

Я пытаюсь реализовать массив 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';

Ответы [ 2 ]

0 голосов
/ 25 февраля 2019

Я использовал mongooose Заполните свойство, проверьте мой код.Это поможет вам понять.

Схема категории

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);

Надеюсь, это поможет вам.Если у вас есть какие-либо сомнения, дайте мне знать.

0 голосов
/ 25 февраля 2019

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

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

или

follows: [Schema.Types.ObjectId],

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

...