mongoose - 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'
}
});
解决方案
从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
}]
推荐阅读
- elasticsearch - 查询字符串和类型嵌套(elasticsearch)
- reactjs - 如何将屏幕名称传递给另一个组件
- excel - 我写的 Excel 函数显示#value
- sql - 如何在多列上进行透视
- sql - 如何在 SQL Server 中的两个表(表顺序和表产品)的相同字段上添加关系?
- mysql - 如何使用 IN() 子句通过多个父 ID 获取所有子代
- php - htaccess 用于 seo 友好的 url 和 php 会话稳定性
- php - 如何传递数组中的变量名
- material-ui - MUI Grid 组件的自定义间距
- javascript - 在组件状态中附加 JSON 对象并显示它