猫鼬中的对象类型

时间:2017-02-03 08:18:12

标签: mongodb mongoose mongodb-query

我正在定义一个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允许的类型之一。但是,如何支持它?

2 个答案:

答案 0 :(得分:30)

您有两种方法可以在db中获取Object

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

答案 1 :(得分:0)

猫鼬 5

“任何事情都会发生”的 SchemaType。 Mongoose 不会在混合路径上进行任何投射。您可以使用 Schema.Types.Mixed 或通过传递空对象字面量来定义混合路径。以下是等价的。

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

对于您当前的架构,您可以使用下一个示例:

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)
相关问题