【问题标题】:mongo 2dsphere Cast to Object failed for value "[]"mongo 2dsphere Cast to Object 值“[]”失败
【发布时间】:2017-02-01 18:16:27
【问题描述】:

我正在使用mongoose v4.8.0mongo v3.4.1, node v6.9.1

我有这个架构:

 var UserSchema = new Schema({
  volAddressCoords: { 'type': {type: String, default: "Point"},
  coordinates: { type: [Number],
  default: [37.9800927,23.73151580]},
  index: {type: String, default: '2dsphere'}}
  (...)
})

用户选中一个复选框,提交一个表单,如果它是假的,这就是 req.body:

{ volAddress: null,
  volAddressCoords: [],
  comRange: null,
  isVolunteer: null }

这是false时抛出的错误(所有字段都是空的): (为方便起见,所有错误都被截断)

{ ValidationError: User validation failed
errors:
   { volAddressCoords:
      { CastError: Cast to Object failed for value "[]" at path "volAddressCoords"
    message: 'Cast to Object failed for value "[]" at path "volAddressCoords"',
    name: 'CastError',
    stringValue: '"[]"',
    kind: 'Object',
    value: [],
    path: 'volAddressCoords',
    reason: undefined },
 'volAddressCoords.type':
  { ValidatorError: `,` is not a valid enum value for path `volAddressCoords.type`.
    message: '`,` is not a valid enum value for path `volAddressCoords.type`.',
    name: 'ValidatorError',
    properties: [Object],
    kind: 'enum',
    path: 'volAddressCoords.type',
    value: [Object] } },
   message: 'User validation failed',
   name: 'ValidationError' }

为真时的正文:

{ volAddress: '2307 Princes Highway, Heywood, Βικτώρια, Αυστραλία',
  volAddressCoords: [ 141.61755859999994, -38.1103413 ],
  comRange: 4,
  isVolunteer: true }

复选框为真时出错:

{ ValidationError: User validation failed
 errors:
   { volAddressCoords:
      { CastError: Cast to Object failed for value "[ 141.61755859999994, -38.1103413 ]" at path "volAddressCoords"
message: 'Cast to Object failed for value "[ 141.61755859999994, -38.1103413 ]" at path "volAddressCoords"',
        name: 'CastError',
        stringValue: '"[ 141.61755859999994, -38.1103413 ]"',
        kind: 'Object',
        value: [Object],
        path: 'volAddressCoords',
        reason: undefined },
     'volAddressCoords.type':
      { ValidatorError: `,` is not a valid enum value for path `volAddressCoords.type`.
        message: '`,` is not a valid enum value for path `volAddressCoords.type`.',
        name: 'ValidatorError',
        properties: [Object],
        kind: 'enum',
        path: 'volAddressCoords.type',
        value: [Object] } },
  message: 'User validation failed',
  name: 'ValidationError' }

我还尝试了另一个 SO 问题 Does applying a 2dsphere index on a mongoose schema force the location field to be required? 中提到的此代码,但发生了同样的错误:

UserSchema.pre('patch', function (next) {
  if (this.isNew && Array.isArray(this.volAddressCoords) && 0 === this.volAddressCoords.length) {
    this.volAddressCoords = undefined;
  }
  next();
});

我可以做什么才能工作?

【问题讨论】:

    标签: node.js mongodb mongoose


    【解决方案1】:

    我的错,我正在将对象转换为字符串...

    volAddressCoords: {type: Object,
        properties: {
          type: {
            type: String,
            enum: 'Point',
            default: 'Point'
          },
          coordinates: {
            type: [Number],
            default: [0, 0]
          },
          index: {type: String, default: '2dsphere'}
        }}
    

    【讨论】:

    • 你能分享解决这个问题的正确语法吗?
    • 对不起@MuhammadUsama 但这个项目已经很老了,从那时起很多事情都发生了变化。你到底面临什么问题?
    猜你喜欢
    • 2017-03-23
    • 1970-01-01
    • 2016-07-24
    • 1970-01-01
    • 2018-01-31
    • 1970-01-01
    • 2022-10-04
    • 2014-02-08
    • 2022-12-19
    相关资源
    最近更新 更多