web-dev-qa-db-fra.com

Type d'objet en mangouste

Je définis un schéma mangouste et sa définition est la suivante:

   inventoryDetails: {
        type: Object,
        required: true

    },
    isActive:{
        type:Boolean,
        default:false
    }

J'ai essayé le type "Objet" et je constate que mes données sont enregistrées avec succès. Lorsque j'ai changé de type en tableau, la sauvegarde échoue.

Exemple de données:

{
    "inventoryDetails" : { 
        "config" : { 
            "count" : { 
                "static" : { "value" : "123" }, 
                "dataSource" : "STATIC" 
            }, 
            "title" : { 
                "static" : { "value" : "tik" }, 
                "dataSource" : "STATIC" 
            } 
        }, 
        "type" : "s-card-with-title-count" 
    } 
}

Le type "objet" ne fait pas partie des types autorisés par les mangoustes. Mais comment est-il soutenu?

20
codewarrior

Vous avez deux options pour obtenir votre Object dans la base de données:

1. Définissez-le vous-même

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

Jetez un oeil à mon vrai code:

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

Cette option vous donne la possibilité de définir la structure de données de l'objet.

Si vous souhaitez une structure de données d'objet flexible, consultez la suivante.

2. Utilisez la valeur par défaut Schema.Types.Mixed type

Exemple tiré de doc :

let YourSchema = new Schema({
  inventoryDetails: Schema.Types.Mixed
})

let yourSchema = new YourSchema;

yourSchema.inventoryDetails = { any: { thing: 'you want' } }

yourSchema.save()
37
Justin