我是 Mongodb 的初学者。 我正在使用MoviesLens数据集。
我的收藏品有一个字段'Title' = 'Toy Story (1995)'
。
我想获得以下内容:
'Title' = 'Toy Story'
'Year' = '1995'
有人可以帮助我吗?
答案 0 :(得分:0)
请记住,在Mongo中,您可以使用相当宽的Javascript标准库子集。关键是Array#map
。比如,你的收藏被称为“电影”。在Mongo CLI中,您可以这样查询:
db.collection('movies').find();
此处,find
会返回cursor。这个游标支持一堆方法,map
就是其中之一。 Map将函数作为第一个参数,此函数将应用于游标的每个项目(实际上,它是very common functional pattern)。所以,如果你这样做:
db.collection('movies').find().map(item => item);
然后你会得到一个元素集合,因为
item => item
是一个应用了一个项目的函数,它返回项目而不更改它。
现在,您拥有item的Title
属性,该值是一个包含电影和年份名称的字符串,用圆括号括起来。要解构字符串,通常使用regular expressions。
你可以看到一个字符串“玩具总动员(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
。