- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我目前正在使用 MongoDb $GeoWithin 查询开发 API GET 方法。如果我检查带有断点的代码,我会看到我的查询正在返回一个结果。但是当我的应用程序应该返回响应时,我在 Postman 中收到错误 (500) 响应。
我似乎无法弄清楚出了什么问题。我看到“无法将‘MongoDB.Bson.BsonArray’类型的对象转换为‘MongoDB.Bson.BsonBoolean’类型。”在堆栈跟踪中,但我没有发现我的模型/MongoDb 文档有任何问题。
免责声明:我当前的代码非常困惑,但我只是想在重构它之前让它正常工作。
我的模型
public class Bag3DMember
{
[BsonId]
[DataMember]
[BsonElement("_id")]
public string _Id { get; set; }
[DataMember]
[BsonElement("type")]
public string Type { get; set; }
[BsonElement("geometry")]
public Geometry Geometry { get; set; }
[BsonElement("geometry_name")]
public string GeometryName { get; set; }
[BsonElement("properties")]
public Properties Properties { get; set; }
}
public class Geometry
{
[BsonElement("type")]
public string Type { get; set; }
[BsonElement("coordinates")]
public BsonArray Coordinates { get; set; }
}
public class Properties
{
[BsonElement("gid")]
public int Gid { get; set; }
[BsonElement("identificatie")]
public string Identificatie { get; set; }
[BsonElement("aanduidingrecordinactief")]
public bool AanduidingrecordInactief { get; set; }
[BsonElement("aanduidingrecordcorrectie")]
public int AanduidingrecordCorrectie { get; set; }
[BsonElement("officieel")]
public bool Officieel { get; set; }
[BsonElement("inonderzoek")]
public bool InOnderzoek { get; set; }
[BsonElement("documentnummer")]
public string DocumentNummer { get; set; }
[BsonElement("documentdatum")]
public string DocumentDatum { get; set; }
[BsonElement("bouwjaar")]
public string Bouwjaar { get; set; }
[BsonElement("begindatumtijdvakgeldigheid")]
public string BeginDatumTijdVakGeldigheid { get; set; }
[BsonElement("einddatumtijdvakgeldigheid")]
public string EindDatumTijdVakGeldigheid { get; set; }
[BsonElement("gemeentecode")]
public string GemeenteCode { get; set; }
[BsonElement("ground-000")]
public decimal? Ground000 { get; set; }
[BsonElement("ground-010")]
public decimal? Ground010 { get; set; }
[BsonElement("ground-020")]
public decimal? Ground020 { get; set; }
[BsonElement("ground-030")]
public decimal? Ground030 { get; set; }
[BsonElement("ground-040")]
public decimal? Ground040 { get; set; }
[BsonElement("ground-050")]
public decimal? Ground050 { get; set; }
[BsonElement("roof-025")]
public decimal? Roof025 { get; set; }
[BsonElement("roof-050")]
public decimal? Roof050 { get; set; }
[BsonElement("roof-075")]
public decimal? Roof075 { get; set; }
[BsonElement("roof-090")]
public decimal? Roof090 { get; set; }
[BsonElement("roof-095")]
public decimal? Roof095 { get; set; }
[BsonElement("roof-099")]
public decimal? Roof099 { get; set; }
[BsonElement("rmse-025")]
public decimal? Rmse025 { get; set; }
[BsonElement("rmse-050")]
public decimal? Rmse050 { get; set; }
[BsonElement("rmse-075")]
public decimal? Rmse075 { get; set; }
[BsonElement("rmse-090")]
public decimal? Rmse090 { get; set; }
[BsonElement("rmse-095")]
public decimal? Rmse095 { get; set; }
[BsonElement("rmse-099")]
public decimal? Rmse099 { get; set; }
[BsonElement("roof_flat")]
public bool RoofFlat { get; set; }
[BsonElement("nr_ground_pts")]
public int NrGroundPts { get; set; }
[BsonElement("nr_roof_pts")]
public int NrRoofPts { get; set; }
[BsonElement("ahn_file_date")]
public string AhnFileDate { get; set; }
[BsonElement("ahn_version")]
public int AhnVersion { get; set; }
[BsonElement("height_valid")]
public bool HeightValid { get; set; }
[BsonElement("tile_id")]
public string TileId { get; set; }
[BsonElement("bbox")]
public BsonArray[] BoundingBox { get; set; }
}
我的 Controller 方法:
[HttpGet]
public ActionResult<List<Bag3DMember>> Get(string coordinates, double radius)
{
if(coordinates == null || radius == 0)
{
return StatusCode(400, "Paramaters: 'coordinates' and/or 'radius' are not found.");
}
var splittedCoordinates = coordinates.Split(',');
if(splittedCoordinates.Length != 2)
{
return StatusCode(406, "Coordinatesformat not accepted.");
}
var formattedCoordinates = Array.ConvertAll(splittedCoordinates, s => double.Parse(s, CultureInfo.InvariantCulture));
FieldDefinition<Bag3DMember> field = "bbox";
var results = _bag3DService.GetBySpatialQuery(field, formattedCoordinates[0], formattedCoordinates[1], radius);
var jsonResults = Json(results);
return Json(results);
}
数据库服务方法
public List<Bag3DMember> GetBySpatialQuery(FieldDefinition<Bag3DMember> field, double x, double y, double radius)
{
//var filter = Builders<Bag3DMember>.Filter.GeoWithinBox(field, (x - (radius/2)), (y - (radius / 2)), (x + (radius / 2)), (y + (radius / 2)));
BsonArray lowerLeftDoc = new BsonArray(new[] { 0, 0 });
BsonArray upperRightDoc = new BsonArray(new[] { 10000000, 10000000 });
BsonArray boundingBox = new BsonArray(new[] { lowerLeftDoc, upperRightDoc });
BsonDocument locBox = new BsonDocument { { "$box", boundingBox } };
BsonDocument locDoc = new BsonDocument { { "$geoWithin", locBox } };
BsonDocument queryDoc = new BsonDocument { { "properties.bbox", locDoc } };
var results = _Bag3DMembers.Find(new QueryDocument(queryDoc)).ToList();
return results;
}
因此在 Visual Studio 中它成功返回了查询。如您所见,它从数据库返回一个文档:
JSON 对象:
{
"$type": "System.Collections.Generic.List<EnveoApi.Bag3DMember>",
"$values": [
{
"$type": "EnveoApi.Bag3DMember",
"_Id": "pand3d.8575483",
"Type": "Feature",
"Geometry": {
"$type": "EnveoApi.Geometry",
"Type": "Polygon",
"Coordinates": {
"$type": "MongoDB.Bson.BsonArray",
"$values": [
{
"$type": "MongoDB.Bson.BsonArray",
"$values": [
{
"$type": "MongoDB.Bson.BsonArray",
"$values": [
108665.593,
447232.925,
0
]
},
{
"$type": "MongoDB.Bson.BsonArray",
"$values": [
108667.648,
447229.102,
0
]
},
{
"$type": "MongoDB.Bson.BsonArray",
"$values": [
108676.807,
447234.217,
0
]
},
{
"$type": "MongoDB.Bson.BsonArray",
"$values": [
108674.334,
447238.579,
0
]
},
{
"$type": "MongoDB.Bson.BsonArray",
"$values": [
108665.593,
447232.925,
0
]
}
]
}
]
}
},
"GeometryName": "geovlak",
"Properties": {
"$type": "EnveoApi.Properties",
"Gid": 8575483,
"Identificatie": "0513100011121832",
"AanduidingrecordInactief": "false",
"AanduidingrecordCorrectie": 0,
"Officieel": "false",
"InOnderzoek": "false",
"DocumentNummer": "BAGAV1776",
"DocumentDatum": "2018-08-15Z",
"Bouwjaar": "1900-01-01Z",
"BeginDatumTijdVakGeldigheid": "2018-08-14T22:00:00Z",
"EindDatumTijdVakGeldigheid": null,
"GemeenteCode": "0513",
"Ground000": -0.44,
"Ground010": -0.42,
"Ground020": -0.41,
"Ground030": -0.41,
"Ground040": -0.4,
"Ground050": -0.39,
"Roof025": 2.72,
"Roof050": 2.81,
"Roof075": 3.03,
"Roof090": 4.76,
"Roof095": 7.04,
"Roof099": 9.72,
"Rmse025": 0.87,
"Rmse050": 0.62,
"Rmse075": 0.62,
"Rmse090": 0.62,
"Rmse095": 0.62,
"Rmse099": 0.62,
"RoofFlat": "false",
"NrGroundPts": 12,
"NrRoofPts": 1247,
"AhnFileDate": "2014-02-25T23:00:00Z",
"AhnVersion": 3,
"HeightValid": "true",
"TileId": "38an2",
"BoundingBox": {
"$type": "MongoDB.Bson.BsonArray[]",
"$values": [
{
"$type": "MongoDB.Bson.BsonArray",
"$values": [
108665.593,
447229.102
]
},
{
"$type": "MongoDB.Bson.BsonArray",
"$values": [
108676.807,
447238.579
]
}
]
}
}
}
]
}
我在 Visual Studio 2019 中没有收到任何错误。我只在 Postman 中收到错误(堆栈跟踪):
System.InvalidCastException: Unable to cast object of type 'MongoDB.Bson.BsonArray' to type 'MongoDB.Bson.BsonBoolean'.
at get_AsBoolean(Object )
at System.Text.Json.JsonPropertyInfoNotNullable`4.OnWrite(WriteStackFrame& current, Utf8JsonWriter writer)
at System.Text.Json.JsonPropertyInfo.Write(WriteStack& state, Utf8JsonWriter writer)
at System.Text.Json.JsonSerializer.HandleObject(JsonPropertyInfo jsonPropertyInfo, JsonSerializerOptions options, Utf8JsonWriter writer, WriteStack& state)
at System.Text.Json.JsonSerializer.WriteObject(JsonSerializerOptions options, Utf8JsonWriter writer, WriteStack& state)
at System.Text.Json.JsonSerializer.Write(Utf8JsonWriter writer, Int32 originalWriterDepth, Int32 flushThreshold, JsonSerializerOptions options, WriteStack& state)
at System.Text.Json.JsonSerializer.WriteAsyncCore(Stream utf8Json, Object value, Type inputType, JsonSerializerOptions options, CancellationToken cancellationToken)
at Microsoft.AspNetCore.Mvc.Infrastructure.SystemTextJsonResultExecutor.ExecuteAsync(ActionContext context, JsonResult result)
at Microsoft.AspNetCore.Mvc.Infrastructure.SystemTextJsonResultExecutor.ExecuteAsync(ActionContext context, JsonResult result)
at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeResultFilters>g__Awaited|27_0(ResourceInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)
at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeFilterPipelineAsync>g__Awaited|19_0(ResourceInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)
at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeAsync>g__Logged|17_1(ResourceInvoker invoker)
at Microsoft.AspNetCore.Routing.EndpointMiddleware.<Invoke>g__AwaitRequestTask|6_0(Endpoint endpoint, Task requestTask, ILogger logger)
at Microsoft.AspNetCore.Authorization.AuthorizationMiddleware.Invoke(HttpContext context)
at Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware.Invoke(HttpContext context)
HEADERS
=======
Accept: */*
Accept-Encoding: gzip, deflate
Cache-Control: no-cache
Connection: keep-alive
Host: localhost:44348
User-Agent: PostmanRuntime/7.19.0
Postman-Token: c23588a0-0e6b-46f8-834c-93dbfc6134eb
编辑 1:
如果我注释掉“几何”中所有嵌套的“属性”和“坐标”,似乎它会起作用。
显然,“坐标”给了我一个问题。但是“属性”中也有一些文件给我带来了问题。但我仍然不明白为什么它试图将 BsonArray (坐标是)转换为 bool 值?
此外,我现在只返回结果,而不是 Json(results)。但这没有任何区别。
编辑 2:如果我让它动态化,“坐标”就会起作用。但我认为这是不好的做法,对吗?
public class Geometry
{
[BsonElement("type")]
public string Type { get; set; }
[BsonElement("coordinates")]
public dynamic Coordinates { get; set; }
}
最佳答案
我遇到了这个问题,我的解决方法是将我的集合通用更改为,一切正常,任何模型结构都可以工作。示例:DB.GetCollection("集合名称");
关于c# - 如何修复 : Unable to cast object of type 'MongoDB.Bson.BsonArray' to type 'MongoDB.Bson.BsonBoolean' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58579516/
我试图理解 BSON 符号 来自网站 BSON Site .但是,我无法理解相关性背后的原因。 我也提到了以下问题,但由于以下原因,我不相信。 Question 1 : 不熟悉 ruby 实现 Que
我收到以下错误: { [Error: Cannot find module '../build/Release/bson'] code: 'MODULE_NOT_FOUND' } js-bson:
假设我们有一个字符串,里面有二进制 bson 数据。如何加载到 bson object ? 最佳答案 我想在同一个页面上有一个例子可以做到这一点: BSONObjBuilder b; b << "na
我正在寻找如下所示的 type_of 方法: import bson bson.type_of(42) # it should return "int". bson.type_of("hello")
Base64 编码的 BSON 比 BSON 小吗? 最佳答案 Piskvor 的权利,base64 编码的任何东西都比原始长。您对某些内容进行 base64 编码以使其进入具有有限字符轨道的 cha
目前正在做一个 Golang 项目,但我得到了一些 Controller package controller import ( "go.mongodb.org/mongo-driver
这个特定的问题与使用 mongodb 和 golang 包 mongo-driver 相关。 ,但我认为这适用于与 mongodb 的大多数接口(interface)。 使用 Find 时要从集合中查
目前正在做一个 Golang 项目,但我得到了一些 Controller package controller import ( "go.mongodb.org/mongo-driver
可能相关:How to use interface type as a model in mgo (Go)? 我有一个像这样的结构: type Game struct { ID b
有没有一种方法可以使用 MongoDB C++ 驱动程序中的 BSON() 宏来生成 BSON 将空值。例如,为了生成一个 BSON 来表示这个文档:{"a": "foo", "b": null}:
我通过以下两种不同的方法生成了一个 ObjectId: user@ubuntu:~$ python Python 2.7.1+ (r271:86832, Apr 11 2011, 18:05:24)
我如何转换 BsonDocument到 FilterDefinition实例? 它是新的 MongoDb C# 驱动程序提供的类。 最佳答案 BsonDocument 和 FilterDefiniti
我正在尝试从 Json 生成 Bson。我尝试使用 Json.Net,但似乎有记录的行为,其中库为整数字段生成 uint64。不幸的是,我们必须使用 uint32。 因此我正在尝试使用 mongodb
我正在使用 https://github.com/mongodb/mongo-go-driver和目前正在尝试实现此类结构的部分更新 type NoteUpdate struct { ID
我目前正在尝试读取 bson 文件以将其导入数据库。我已经可以读取该文件并将其作为字节打印,但最终只收到 bson.errors.InvalidBSON: objsize Too Large 错误。
我尝试在 arch linux 迷你计算机(cubox)上安装 mean.io 堆栈。所以我安装了 nodejs 和 mongodb 包。 我用 Git 检索了堆栈,进行了 npm 安装(没问题)但是
为什么会输出false?我期待 true... package main import ( "fmt" "time" "gopkg.in/mgo.v2/bson" )
这是一种愚蠢的语法错误,尝试了很多方法,但都无法正常工作,请大家帮忙。 使用 mgo 在 Go 中使用 MongoDB,我只是尝试简化 $ne 运算符的使用,代码如下所示,但不断出现编译语法错误: l
我设置了新的 Typescript/React 项目,在 tsconfig.json 文件中收到此错误消息 "找不到 'bson' 的类型定义文件。该文件在程序中,因为:隐式类型库 'bson' 的入
我尝试将数据从 SQL Server 迁移到 MongoDB,但在将数据导入到 MongoDB 的最后阶段遇到了以下类型错误。 mongoImp = dbo.insert_many(jArray)
我是一名优秀的程序员,十分优秀!