2013-05-05 8 views
10

mam schematu mangusta i model zdefiniowane następująco:Czy zastosowanie indeksu 2dsphere w schemacie mangusty wymusza pole lokalizacji, które będzie wymagane?

var mongoose = require('mongoose') 
    , Schema = new mongoose.Schema({ 
     email: { 
     index: { 
      sparse: true, 
      unique: true 
     }, 
     lowercase: true, 
     required: true, 
     trim: true, 
     type: String 
     }, 
     location: { 
     index: '2dsphere', 
     type: [Number] 
     } 
    }) 
    , User = module.exports = mongoose.model('User', Schema); 

Gdybym próbować:

var user = new User({ email: '[email protected]' }); 

user.save(function(err) { 
    if (err) return done(err); 

    should.not.exist(err); 
    done(); 
}); 

pojawia się komunikat o błędzie:

MongoError: Can't extract geo keys from object, malformed geometry?:{} 

Pomimo polu lokalizacji w tym Schemat nie jest wymagany, wydaje się, że tak czy inaczej. Próbowałem dodać default: [0,0], który omija ten błąd, jednak wygląda na to, że jest trochę hackerem, ponieważ nie jest to dobre ustawienie domyślne, a schemat nie wymagałby od użytkownika, aby jego lokalizacja była przez cały czas.

Czy indeksy geoprzestrzenne z MongoDB/mangą sugerują, że indeksowane pole jest wymagane?

Odpowiedz

14

Domyślnie właściwość zadeklarowana jako tablica otrzymuje domyślną pustą tablicę do pracy. MongoDB zaczął sprawdzać pola geojsona i krzyczy o pustych tablicach. Praca polega na dodaniu wstępnego zapisu haka do schematu, który sprawdza ten scenariusz i najpierw naprawia dokument.

schema.pre('save', function (next) { 
    if (this.isNew && Array.isArray(this.location) && 0 === this.location.length) { 
    this.location = undefined; 
    } 
    next(); 
}) 
+3

jest to coś, które mogą być dodawane do mangusta dla {type: [numer], indeks: ''} 2dsphere pola, więc zajmuje się automatycznie? –

+3

zdecydowanie: https://github.com/LearnBoost/mongoose/issues/1668 – aaronheckmann

+0

Świetne, okrzyki Aaron –

31

Dla mangusta 3.8.12, można ustawić wartość domyślną:

Powiązane problemy