Проще говоря, не устанавливайте его вообще.Проблема, вероятно, усугубляется вашей схемой мангуста.С точки зрения MongoDB, ему все равно, если свойство просто не существует, и впоследствии будет игнорировать его в индексе.
Это «мангуст», который на самом деле создает вещи, когда вы этого не хотите, так просто«скажите это», чтобы не включать структуру, если вы не предоставили никаких данных:
location: {
type: { type: String },
coordinates: { type: [], default: undefined }
}
Пока массив coordinates
установлен в default
для значения undefined
, тогда mongooseне пытается добавить «пустой массив» в документ, когда он сохраняется в базе данных, что может вызвать проблемы для индекса.
В качестве полной демонстрации:
const { Schema } = mongoose = require('mongoose');
const uri = 'mongodb://localhost/test';
mongoose.Promise = global.Promise;
mongoose.set('debug', true);
const geoSchema = new Schema({
name: String,
location: {
type: { type: String },
coordinates: { type: [], default: undefined }
}
});
const GeoTest = mongoose.model('GeoTest', geoSchema);
const log = data => console.log(JSON.stringify(data, undefined, 2));
(async function() {
try {
const conn = await mongoose.connect(uri);
await Promise.all(Object.entries(conn.models).map(([k,m]) => m.remove()));
await GeoTest.insertMany([
{
"name": "Sydney",
"location": {
"type": "Point",
"coordinates": [
151.21170043945312,
-33.86414397991936
]
}
},
{ "name": "Nowhere" }
]);
let results = await GeoTest.find();
log(results);
} catch(e) {
console.error(e)
} finally {
process.exit()
}
})()
Какойпоказывает сохраненные документы как:
[
{
"location": {
"type": "Point",
"coordinates": [
151.21170043945312,
-33.86414397991936
]
},
"_id": "5af8e6c17c91d648feb26cc4",
"name": "Sydney",
"__v": 0
},
{
"_id": "5af8e6c17c91d648feb26cc5",
"name": "Nowhere",
"__v": 0
}
]
Так что, если вы на самом деле не предоставляете никаких данных location
, то там просто ничего нет.Что делает MongoDB счастливым, потому что в свойстве нет недопустимых данных для индексации для "2d"
или "2dsphere"
.