我是初学者Mongodb。 我正在使用MoviesLens数据集。mongodb - 摘自标题年份
例如,我的收藏有一个字段'Title' = 'Toy Story (1995)'
。
我想获取以下信息:
'Title' = 'Toy Story'
'Year' = '1995'
有人能帮帮我,好吗?
我是初学者Mongodb。 我正在使用MoviesLens数据集。mongodb - 摘自标题年份
例如,我的收藏有一个字段'Title' = 'Toy Story (1995)'
。
我想获取以下信息:
'Title' = 'Toy Story'
'Year' = '1995'
有人能帮帮我,好吗?
请记住,在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
这需要项目,并做了两件事施加这样的功能是什么:
应该是这样的:
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
。