首页 > 解决方案 > Mongoose:值“[ [ 2.3635503, 48.8674024 ]....]] 时转换为数组失败

问题描述

当我通过猫鼬在mongo中保存位置点时遇到了一个奇怪的问题。

const testSchema1 = new mongoose.Schema({
  releasePoints: [{
    type: [Number]
  }]
}, {
  timestamps: {
    createdAt: 'created_at',
    updatedAt: 'updated_at'
  }
});

const testSchema2 = new mongoose.Schema({
  releasePoints: [[Number]]
}, {
  timestamps: {
    createdAt: 'created_at',
    updatedAt: 'updated_at'
  }
});

当我使用testSchema2保存数据成功时,但我使用testSchema1 throw err

validation failed: releasePoints: Cast to Array failed for value "[ [ 2.3635503,....

testSchema1和有什么区别testSchema2

可以添加验证testSchema1吗?

例如:

const testSchema1 = new mongoose.Schema({
  releasePoints: [{
    type: [Number],
    validate: (val) => val.length === 2
  }]
}, {
  timestamps: {
    createdAt: 'created_at',
    updatedAt: 'updated_at'
  }
});

标签: mongoose

解决方案


https://mongoosejs.com/docs/schematypes.html#arrays你可以说第一个模式是一个文档数组,第二个是原始数组。

从这个线程 如何使用 2d 地理索引正确定义 Mongoose 模式中的数组中的对象,我想说要使第一个模式表现得像第二个模式,你应该像这样用 releasePoints 编写它:

 releasePoints: [{
    type: Array , default: []
  }]

然后添加一个验证器来检查“数字类型插入”。或类似的东西:

releasePoints: [{
   data: [Number]
}]

但是您应该使用数据属性 [x].data[y] 访问该值

如果您需要保存纬度/经度值,您可以简单地执行以下操作:

releasePoints: [{
   lat: Number,
   long: Number
}]

推荐阅读