Mongoose: сбой приведения к массиву для значения "[[2.3635503, 48.8674024] ....]]" - PullRequest
0 голосов
/ 12 февраля 2019

Я встретил странный вопрос, когда я сохранял точки позиции в монго от mongoose.

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

1 Ответ

0 голосов
/ 12 февраля 2019

из https://mongoosejs.com/docs/schematypes.html#arrays можно утверждать, что первая схема является массивом документов, а вторая - массивом примитивов.

из этого потока Как определить объект в массиве в Mongooseсхема правильно с 2d geo index , я бы сказал, что для того, чтобы первая схема работала как вторая, вы должны написать ее с помощью releasePoints так:

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

, затем добавьте валидатор для проверкиMsgstr "Вставка типа номера".или что-то вроде:

releasePoints: [{
   data: [Number]
}]

Но тогда вы должны получить доступ к значению с атрибутом данных [x] .data [y]

Если вам нужно сохранить значение широты / долготы, вымог бы просто сделать:

releasePoints: [{
   lat: Number,
   long: Number
}]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...