В настоящее время я работаю над MongoDB с C # , и мне было интересно, как работает около / geoNear в .NET.Я мог бы заставить его работать в go , но я борюсь с C #
In go У меня есть следующее:
var addresses []*models.Address
bson.M{
"location": bson.M{
"$near": bson.M{
"$geometry": bson.M{
"type": "Point",
"coordinates": []float64{ in.Area.Longitude, in.Area.Latitude },
},
"$maxDistance": in.Area.Scope,
},
},
}, &addresses)
Теперь в C # у меня есть следующее:
var options = new FindOptions<SchoolDataModel> { Limit = 10 }; // Just because I wanna limit to 10 results
var filter = NewFilterBuilder().NearSphere(s => s.Location, in.Area.Longitude, in.Area.Latitude);
return await (await GetCollection<AddressDataModel>().FindAsync(filter, options)).ToListAsync();
Затем я получаю следующее:
"ExceptionMessage": "Команда findСбой: ошибка при обработке запроса: ns = eyesapp.SchoolDataModel limit = 9Tree: GEONEAR field = Location maxdist = 1.79769e + 308 isNearSphere = 1 \ nSort: {} \ nProj: {} \ n возвращена ошибка планирования: не удалось найти индекс для $запрос geoNear. "
Я знаю, что в go Мне пришлось создать индекс, поэтому я пытался сделать то же самое в C # :
await GetMongoDatabase()
.GetCollection<AddressDataModel>(typeof(AddressDataModel).Name)
.Indexes.CreateOneAsync(new CreateIndexModel<AddressDataModel>(Builders<AddressDataModel>.IndexKeys.Geo2DSphere(x => x.Location)));
Однако я получаю следующее исключение при запуске моего приложения ASP.NET при попытке создания моего индекса:
{"Команда createIndexes завершилась неудачно: не удается извлечь географические ключи: {_id: ObjectId....}. "}
К концу я хочу добиться того, чтобы, как и в Go , можно было найти адреса рядом с заданным местоположением,с мамойМаксимальное расстояние, но также с предопределенным пределом, таким как 10, 20 или 50.
Спасибо за любую помощь