繁体   English   中英

MongoDB C# 驱动程序:LINQ 对枚举进行过滤将枚举序列化为 int

[英]MongoDB C# driver: LINQ filtering on enum serialises enum as int

我正在尝试在 Mongo 数据库中查询一组 GeoJSON。 文档看起来有点像这样:

{
    "_id" : ObjectId("5db2d9d7a9912b215bb6bfc8"),
    "type" : "Feature",
    "properties" : {
//snip
    },
    "geometry" : {
        "type" : "Polygon",
        "coordinates" : [ //snip ]
}
}

我的几何属性的 C# class 如下所示:

    public class Geometry
    {

        [JsonProperty("type")]
        [BsonElement("type")]
        [BsonRepresentation(BsonType.String)]
        public GeometryType Type { get; set; }
}

但是我有一些 LINQ 过滤代码有点像这样:

Builders<Feature>.Filter.Ne(f => f.Geometry.Type, GeometryType.LineString)

但这会在 Mongo 中生成一个查询,如下所示:

"geometry.type" : {
                "$ne" : 1
            }

这没有按预期过滤,因为它将 LineString 序列化为 1,而不是“LineString”,这是它在数据库中的表示方式。 从字符串反序列化工作正常。

如何让 Mongo 驱动程序生成正确的查询?

我必须在启动时为枚举类型注册一个序列化器,如下所示:

BsonSerializer.RegisterSerializer(new EnumSerializer<GeometryType>(BsonType.String));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM