2016-12-28 55 views
-3

我是初学者Mongodb。 我正在使用MoviesLens数据集。mongodb - 摘自标题年份

例如,我的收藏有一个字段'Title' = 'Toy Story (1995)'

我想获取以下信息:

'Title' = 'Toy Story' 
'Year' = '1995' 

有人能帮帮我,好吗?

回答

0

请记住,在Mongo中,您可以使用一个相当宽的Javascript标准库子集。关键是Array#map。说,你的收藏被称为“电影”。在蒙戈CLI,您的查询是这样的:

db.collection('movies').find(); 

这里,find返回cursor。这个游标支持一堆方法,而map就是其中之一。 Map以函数作为第一个参数,该函数将应用于光标的每一项(实际上,它是一个very common functional pattern)。所以,如果你这样做:

db.collection('movies').find().map(item => item); 

,那么你会拥有自己的元素的集合,因为

item => item 

是与项目和收益项目本身适用不改变功能它。

现在,您有Title项目的属性,并且该值是一个字符串,其中包含电影和年份的名称,用圆括号括起来。要解构一个字符串,通常使用regular expressions。你可以看到一个字符串“Toy Story(1995)”有一个可能的模式:“%MOVIE%(%YEAR%)”,其中%MOVIE%是一系列字母,数字和其他可能的字符(短划线等),而%YEAR%必须只包含数字。适当的正则表达式将

/^(.+)\s\((\d{4})\)$/ 

你做下一个是你在map这需要项目,并做了两件事施加这样的功能是什么:

  1. 替换“标题”属性只有标题的价值,和
  2. 添加具有适当值的“Year”属性。

应该是这样的:

db.collection('movies').find().map(item => Object.assign({}, item, { 
    Title: /^(.+)\s\((\d{4})\)$/.match(item.Title)[1], 
    Year: /^(.+)\s\((\d{4})\)$/.match(item.Title)[2] 
})); 

请注意,调用cursor.map不更新集合中的项目。要更新它们,请使用db.collection.update