Спасибо @ alex-blex за подсказку!
Использование валидатора для новых коллекций:
> db.createCollection("places", {validator: {"geometry.type": {$in:
... ["Point", "MultiPoint", "LineString", "MultiLineString", "Polygon", "MultiPolygon"]
... }}})
{ "ok" : 1 }
> db.places.createIndex({'geometry': '2dsphere'})
{
"createdCollectionAutomatically" : false,
"numIndexesBefore" : 1,
"numIndexesAfter" : 2,
"ok" : 1
}
Теперь мы не можем вставить пустую геометрию:
> db.places.insert({'geometry': []})
WriteResult({
"nInserted" : 0,
"writeError" : {
"code" : 121,
"errmsg" : "Document failed validation"
}
})
> db.places.insert({'geometry': {}})
WriteResult({
"nInserted" : 0,
"writeError" : {
"code" : 121,
"errmsg" : "Document failed validation"
}
})
> db.places.insert({'geometry': null})
WriteResult({
"nInserted" : 0,
"writeError" : {
"code" : 121,
"errmsg" : "Document failed validation"
}
})
Чтобы добавить валидатор в существующую коллекцию:
> db.places.createIndex({'geometry': '2dsphere'})
{
"createdCollectionAutomatically" : true,
"numIndexesBefore" : 1,
"numIndexesAfter" : 2,
"ok" : 1
}
> db.runCommand({ collMod: 'places', validator: {"geometry.type": {$in:
... ["Point", "MultiPoint", "LineString", "MultiLineString", "Polygon", "MultiPolygon"]
... }}})
{ "ok" : 1 }