2016-12-28 62 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