在查找上转换 MongoDB 数据

All*_*wig 5 string transform function mongodb

是否可以转换 MongoDB 中查找查询返回的数据?

例如,我有一个firstandlast字段来存储用户的名字和姓氏。在某些查询中,我希望仅返回名字和姓氏首字母(例如“Joe Smith”返回为“Joe S”)。在 MySQL 中,SUBSTRING()可以在语句中的字段上使用函数SELECT

Mongo 中是否有像 SQL 中那样的数据转换或字符串函数?如果是这样,请提供一个使用示例。如果没有,除了循环返回的对象之外,是否还有建议的方法来转换数据?

Pro*_*ane 4

使用 mongodb 在服务器端几乎可以做任何事情。您通常会听到“不”的原因是您牺牲了太多的速度,而在正常情况下它是有意义的。PyMongo 背后的主要力量之一,10gen 的 Mike Dirolf,在这里有一篇关于在 pymongo 中使用服务器端 javascript 的精彩博客文章:http://dirolf.com/2010/04/05/stored-javascript-in-mongodb-和-pymongo.html。他的示例是存储一个 JavaScript 函数以返回两个字段的总和。但您可以轻松修改以返回用户名字段的第一个字母。要点是这样的:

db.system_js.first_letter = "function (x) { return x.charAt(0); }"
Run Code Online (Sandbox Code Playgroud)

不过,首先要明白,mongodb 的设计初衷是非常擅长检索数据,而不是真正擅长处理数据。建议(例如,参见 Oreilly 的 Kristina Chodorow 为 mongodb 开发人员提供的 50 个提示和技巧)是执行 Andrew 上面简洁提到的操作:创建第一个字母列并返回它。任何处理都可以在应用程序中更有效地完成。

但是,如果您觉得即使在从“视图”返回 fullname[0] 之前查询全名也会带来太大的安全风险,那么您不需要以最快的方式完成所有操作。由于公众对速度的担忧,我有一段时间避免在 mongodb 中使用 Map-Reduce。然后我运行了第一个 MapReduce,并用拇指摆弄了 0.1 秒,因为它处理了 80,000 个 10k 文档。我意识到在事情的计划中,那是很小的。但它说明,仅仅因为大型网站在某些服务器端处理上受到性能影响是不好的,并不意味着这对您来说很重要。就我而言,我认为迁移到 Hadoop 所花费的时间比偶尔吃掉 0.1 秒的时间要长一些。祝您的网站好运