【问题标题】:Force mongo to store values in lowercase强制 mongo 以小写形式存储值
【发布时间】:2015-07-24 19:14:23
【问题描述】:

目前我在插入集合之前调用 .toLower():

site.Name = site.Name.ToLower();
collection.Insert(site);

我看到一篇文章 (How to force mongo to store members in lowercase?) 强制成员名称为小写,但找不到有关强制值小写的信息。

【问题讨论】:

    标签: c# mongodb mongodb-.net-driver


    【解决方案1】:

    这样做,无论是手动还是自动方式,似乎都相当危险,因为这是一项有损操作。在某些情况下,在插入时转换数据是合适的,例如当规范化字符串以便更好地搜索时,但一般来说,我会说这是一个坏主意。在从客户端读取或从数据库读取时转换数据。

    另一种方法是添加计算域:

    public string NormalizedName {
      get { return Name.ToLowerInvariant(); }
      set { } // also hacky,
    }
    

    特别是在字符串搜索中,这也可用于删除或替换有问题的 UTF-8 字符。

    【讨论】:

    • 我的查询不区分大小写:sites.Where(x => x.Name.ToLower() == filter.Name.ToLower());但是,我正在尝试防止插入多个“www.site.com”、“WWW.SITE.COM”、“wWw.SiTe.CoM”等副本。
    • 在这种情况下,我绝对建议在从控制器中的客户端读取数据时执行ToLower(),或者使用计算字段进行搜索。 LINQ Where() 和 mongodb 的 $where 很慢(都不能使用索引)。相反,在NormalizedNameFind<Foo>(Builders<Foo>.EQ(p => p.NormalizedName, filter.Name.ToLowerInvariant())) 上放置一个索引。另一种选择是让类的构造函数执行转换,即Foo(name) { this.Name = name.ToLowerInvariant() }
    • 我使用了一个小写字符串的自定义序列化程序。我想在这里分享它,但我似乎无法在评论框中正确格式化代码
    猜你喜欢
    • 2013-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-11
    • 2018-05-01
    • 2017-01-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多