J’ai un schéma et un modèle de mongoose définis comme suit:
var mongoose = require('mongoose') , Schema = new mongoose.Schema({ email: { index: { sparse: true, unique: true }, lowercase: true, required: true, sortingm: true, type: Ssortingng }, location: { index: '2dsphere', type: [Number] } }) , User = module.exports = mongoose.model('User', Schema);
Si je tente:
var user = new User({ email: '[email protected]' }); user.save(function(err) { if (err) return done(err); should.not.exist(err); done(); });
Je reçois le message d’erreur:
MongoError: Can't extract geo keys from object, malformed geometry?:{}
Bien que le champ de localisation de ce schéma ne soit pas obligatoire, il semble agir de toute façon comme tel. J’ai essayé d’append default: [0,0]
qui contourne cette erreur, mais cela ressemble à un bidouillage, car ce n’est clairement pas un bon défaut, et idéalement, le schéma n’exigerait pas que l’utilisateur ait un emplacement à chaque fois.
Les index géospatiaux avec MongoDB / mongoose impliquent-ils que le champ en cours d’indexation est requirejs?
Par défaut, une propriété déclarée qu’un tableau reçoit un tableau vide par défaut à utiliser. MongoDB a commencé à valider les champs geojson et à crier au sujet des tableaux vides. La solution consiste à append un crochet de pré-enregistrement au schéma qui vérifie ce scénario et corrige le document en premier.
schema.pre('save', function (next) { if (this.isNew && Array.isArray(this.location) && 0 === this.location.length) { this.location = undefined; } next(); })
Pour Mangoose 3.8.12, vous définissez la valeur par défaut:
var UserSchema = new Schema({ location: { 'type': {type: Ssortingng, enum: "Point", default: "Point"}, coordinates: { type: [Number], default: [0,0]} }, }); UserSchema.index({location: '2dsphere'});
La seule façon pour moi de résoudre ce problème a été de changer le type d’index de
GEO:{ type: [Number], index: '2dsphere' }
à
GEO:{ type: [Number], index: '2d' }
C’était un cauchemar