NodeJS/Mongoose ObjectId 的架构数组

NodeJS/Mongoose schema array of ObjectId

我正在尝试在 Mongoose 的模式中实现一个 ObjectId 数组。 我在互联网上搜索了一下,我发现这应该有效:

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 数组,通过引用模式 "User" 以及用户关注的人

[编辑] 正如 Bhanu Sengar 在评论中提到的那样,我不得不在架构之前放置 "mongoose"。

[{ type: mongoose.Schema.Types.ObjectId, ref: 'User' }] 

正如 Halil SAFAK 所说,我删除了默认值。

它也没有用,因为我在两个导入之间有冲突

import mongoose from 'mongoose';
import Schema from 'mongoose';

其实错误不在ObjectId,而在你的配置。你在'follows'中定义了objectId,然后你写了数组作为默认值,但这实际上不是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);

希望对您有所帮助。如果您有任何疑问,请告诉我。