web-dev-qa-db-ja.com

mongooseのオブジェクトタイプ

私はマングーススキーマを定義していますが、定義は次のとおりです。

   inventoryDetails: {
        type: Object,
        required: true

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

「オブジェクト」タイプを試しましたが、データが正常に保存されています。タイプを配列に変更すると、保存に失敗します。

サンプルデータ:

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

「オブジェクト」タイプは、mongooseが許可するタイプの1つではありません。しかし、どのようにサポートされていますか?

20
codewarrior

データベースでObjectを取得するには、2つのオプションがあります。

1.自分で定義する

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

私の実際のコードを見てください:

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

このオプションを使用すると、オブジェクトのデータ構造を定義できます。

柔軟なオブジェクトデータ構造が必要な場合は、次を参照してください。

2.デフォルトのSchema.Types.Mixedタイプを使用します

doc からの例:

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

let yourSchema = new YourSchema;

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

yourSchema.save()
37
Justin