Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String 在查找时转换MongoDB数据_String_Function_Mongodb_Transform - Fatal编程技术网

String 在查找时转换MongoDB数据

String 在查找时转换MongoDB数据,string,function,mongodb,transform,String,Function,Mongodb,Transform,是否可以在MongoDB中转换Find查询返回的数据 例如,我有一个first和last字段来存储用户的名字和姓氏。在某些查询中,我只希望返回名字和姓氏首字母(例如,“Joe Smith”返回为“Joe S”)。在MySQL中,SELECT语句中的字段可以使用SUBSTRING()函数 Mongo中是否有像SQL中那样的数据转换或字符串函数?如果是,请提供一个使用示例。如果没有,除了在返回的对象中循环外,是否还有一种转换数据的建议方法?您应该问自己的问题是为什么需要这些数据。如果出于显示目的需要

是否可以在MongoDB中转换Find查询返回的数据

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


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

您应该问自己的问题是为什么需要这些数据。如果出于显示目的需要它,请在视图代码中执行此操作。如果出于查询目的需要它,那么按照Andrew的建议执行,并将其作为额外字段存储在对象上。Mongo不提供服务器端转换(通常,在它提供的地方,您通常不想使用它们);答案通常不是像在关系数据库中那样处理数据,而是使用数据存储的更灵活特性将数据预烘焙为您将要使用的格式


如果您能提供更多关于如何使用这些数据的信息,那么我们可能会回答得更有用一些。

使用mongodb在服务器端几乎可以做任何事情。你通常会听到“不”的原因是你牺牲了太多的速度,以至于在一般情况下无法理解。PyMongo背后的主要力量之一,Mike Dirolf with 10gen,在这里有一篇关于使用服务器端javascript与PyMongo的博客文章:。他的示例是存储一个javascript函数以返回两个字段的总和。但是您可以轻松地修改以返回用户名字段的第一个字母。要点如下:

db.system_js.first_letter = "function (x) { return x.charAt(0); }"
不过,首先要了解,mongodb非常擅长检索数据,而不是处理数据。建议(例如,参见Oreilly的Kristina Chodorow为mongodb开发者提供的50个技巧和窍门)做Andrew在上面简洁地提到的事情:制作一个首字母列,然后返回。任何处理都可以在应用程序中更有效地完成


但是,如果您觉得即使在从“视图”返回全名[0]之前查询全名也存在太大的安全风险,那么您不需要以尽可能快的方式完成所有操作。由于公众对速度的担忧,我暂时避免在mongodb中使用MapReduce。然后,我运行了我的第一个map reduce,在它处理80000个10k文档时,我的拇指旋转了0.1秒。我意识到在事情的发展过程中,这是微不足道的。但它说明,仅仅因为一个大型网站在服务器端处理上受到性能影响是不好的,并不意味着这对你来说很重要。在我的例子中,我想迁移到Hadoop要比只吃它稍微长一点。时不时地花1秒钟。祝您网站好运

该数据集用于web服务。根据请求者的权限,他们无法查看用户的全名,在这种情况下,只返回首字母。显然,这不允许在视图层上进行转换。我可以创建另一个字段,但这似乎很愚蠢,因为我不需要对这样的字段进行查询。为什么不能在视图上进行查询?这似乎是根据查看用户的权限决定渲染内容的正确位置。此外,我发现使用MongooseJS,我可以使用“虚拟”来完成这一任务。例如:schUsers.virtual('lastInitial').get(函数(){返回this.last.substr(0,1);});我不确定这是什么翻译成MongoDb代码,或者它是否完全由Mongoose处理。