You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MongoDB Long类型$gt查询异常及C#实现正确查询咨询

解决C#操作MongoDB时Long字段$gt查询包含等值的问题

问题原因

你的查询数值1717520199654397472已经超出了JavaScript Number类型的精度上限(2^53=9007199254740992),当C#驱动直接将long类型数值序列化为JSON数字时,MongoDB会将其解析为double类型,导致精度丢失,最终出现$gt查询返回等值条目的异常。而MongoDB Shell中用Long()包裹数值,是明确指定了64位整数类型,因此查询正常。

解决方案

方法1:使用BsonInt64构造查询条件

直接通过BsonInt64.Create()将数值包装为MongoDB的64位整数类型,确保查询时类型严格匹配:

var filter = Builders<myDataStruct>.Filter.And(
    Builders<myDataStruct>.Filter.Gt(x => x.nid, BsonInt64.Create((long)from)),
    Builders<myDataStruct>.Filter.Eq(x => x.Res, "0")
);

方法2:确保实体类字段映射为Int64

如果myDataStruct类中nid字段已经是long类型,MongoDB驱动默认会映射为Bson Int64,但如果存在自定义映射配置,需要显式指定序列化器(程序启动时只需执行一次):

BsonClassMap.RegisterClassMap<myDataStruct>(cm =>
{
    cm.AutoMap();
    cm.MapMember(x => x.nid).SetSerializer(new Int64Serializer());
});

以上两种方式构造的查询,都会明确以64位整数类型传递条件,和MongoDB Shell中Long()的效果一致,可彻底解决$gt查询的异常问题。

内容的提问来源于stack exchange,提问作者Andrea Cerfogli

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 23:33:24