是否可以在MongoDB中转换从Find查询返回的数据?
例如,我有一个first和last字段来存储用户的名字和姓氏。在某些查询中,我希望只返回名字和姓氏的首字母(例如“Joe Smith”返回为“Joe S”)。在MySQL中,可以在SELECT语句中的字段上使用SUBSTRING()函数。
Mongo中有没有像SQL一样的数据转换或字符串函数?如果是这样,你能提供一个用法的例子吗?如果没有,是否有建议的方法来转换数据,而不是遍历返回的对象?
发布于 2011-11-13 00:04:25
使用mongodb几乎可以在服务器端做任何事情。你通常会听到“不”的原因是你牺牲了太多的速度来使它在正常情况下变得没有意义。PyMongo背后的主要力量之一,来自10gen的Mike Dirolf,有一篇关于在pymongo中使用服务器端javascript的博客文章:http://dirolf.com/2010/04/05/stored-javascript-in-mongodb-and-pymongo.html。他的例子是存储一个javascript函数来返回两个字段的总和。但是您可以很容易地修改以返回用户名字段的第一个字母。要点是这样的:
db.system_js.first_letter = "function (x) { return x.charAt(0); }"不过,首先要理解的是,mongodb非常擅长检索数据,而不是真正擅长处理数据。这个建议(参见Oreilly的Kristina Chodorow给mongodb开发人员的50个技巧和技巧)就是做Andrew上面简洁暗示的事情:创建一个第一个字母列,然后返回它。任何处理都可以在应用程序中更高效地完成。
但是,如果你觉得在从“视图”返回全名之前查询全名也有太大的安全风险,你不需要以最快的速度完成每一件事。由于公众对速度的担忧,我在mongodb中避免使用map-reduce有一段时间了。然后,我运行了我的第一个map reduce,在处理80,000个10k文档的过程中,我用拇指摆弄了.1秒。我意识到在整个计划中,这是微不足道的。但它表明,仅仅因为一个大型网站在一些服务器端处理上受到性能影响是不好的,并不意味着这对你来说是重要的。在我的例子中,我想我迁移到Hadoop的时间可能会比偶尔花几秒钟的.1时间稍长一些。祝你的网站好运
发布于 2011-11-12 07:06:44
您应该问自己的问题是,为什么需要这些数据。如果您需要它用于显示目的,请在视图代码中执行此操作。如果您需要它用于查询目的,那么按照Andrew的建议进行操作,并将其作为额外的字段存储在对象上。Mongo不提供服务器端转换(通常,在它提供的地方,您通常不想使用它们);答案通常是不像在关系数据库中那样处理数据,而是使用数据存储更灵活的特性将数据预烘焙为您将要使用的格式。
如果您能提供有关如何使用此数据的更多信息,那么我们可能能够回答得更有用一些。
https://stackoverflow.com/questions/8100838
复制相似问题