Object type in mongoose Object type in mongoose mongoose mongoose

Object type in mongoose


You have two options to get your Object in the db:

1. Define it by yourself

let YourSchema = new Schema({  inventoryDetails: {    config: {      count: {        static: {          value: {            type: Number,            default: 0          },          dataSource: {            type: String          }        }      }    },    myType: {      type: String    }  },  title: {    static: {      value: {        type: Number,        default: 0      },      dataSource: {        type: String      }    }  }})

Take a look at my real code:

let UserSchema = new Schema({  //...  statuses: {    online: {      type: Boolean,      default: true    },    verified: {      type: Boolean,      default: false    },    banned: {      type: Boolean,      default: false    }  },  //...})

This option gives you the ability to define the object's data structure.

If you want a flexible object data structure, see the next one.

2. Use the default Schema.Types.Mixed type

Example taken from the doc:

let YourSchema = new Schema({  inventoryDetails: Schema.Types.Mixed})let yourSchema = new YourSchema;yourSchema.inventoryDetails = { any: { thing: 'you want' } }yourSchema.save()


Mongoose 5

An "anything goes" SchemaType. Mongoose will not do any casting on mixed paths. You can define a mixed path using Schema.Types.Mixed or by passing an empty object literal. The following are equivalent.

const Any = new Schema({ any: {} });const Any = new Schema({ any: Object });const Any = new Schema({ any: Schema.Types.Mixed });const Any = new Schema({ any: mongoose.Mixed });

For your current schema you can use the next example:

import mongoose from 'mongoose'const inventorySchema = mongoose.Schema({  inventoryDetails: {    type: mongoose.SchemaTypes.Mixed,    required: true  },  isActive:{    type: Boolean,    default:false  }})const inventory = await inventorySchema.create({  inventoryDetails: {     config: {       count: {         static: { value: '123' },         dataSource: 'STATIC'       },       title: {         static: { value: 'tik' },         dataSource: 'STATIC'       }     },     type: 's-card-with-title-count'   }})console.log(inventory)