此链接带有查询字符串:
https://.../monsters/find?query={"battery_life": 2.4}
控制器中的此方法:
[HttpGet("find")]
public async Task<IActionResult> GetAllByCriteria([FromQuery(Name = "query")]string query)
{
if (!string.IsNullOrEmpty(query))
{
BsonDocument q = BsonDocument.Parse(query);
var result = await _monsterService.GetAll(q);
return Ok(result);
}
return NotFound();
}
,电池寿命模型字段为:
[BsonRepresentation(BsonType.Decimal128)]
public decimal BatteryLife { get; set; }
我要的电池寿命等于2.4,但是当我用Postman调试时,在BsonDocument.Parse之后我得到了:
为什么会这样?解决办法是什么。
thx
更新
我从调试器中看到的是battery_life类型是字符串。值(2.4)类型是? =>
答案 0 :(得分:1)
好吧,@ ckuri说的对,默认情况下会反序列化为double。所以发生了什么事,当我创建一个电池寿命类型为decimal128的新对象时,将其另存为decimal128。可以在这里用MongoDB指南针看到它:
当我尝试查询时,它正在查找具有double类型的字段battery_life,但该字段不存在,因此它返回一个空数组。
当我手动将类型更改为double并重试查询时,它可以工作。 所以从现在开始,我将对象字段的Battery_life类型更改为
[BsonRepresentation(BsonType.Double)]
public double BatteryLife { get; set; }
谢谢你们,我学到了更多的东西!