2013-08-06 46 views
0

我無法纏繞我的頭圍繞如何實現以下:骨幹過濾器來匹配字符串

我有一個MongoDB的架構,像這樣:

var DocumentSchema = new Schema({ 
    num: Number, 
    authors: [String] 
}) 

正在被用於Backbone集合的後端。我無法理解如何篩選每個文檔的authors陣列以匹配用戶名。

喜歡的東西:

var DocumentCollection = Backbone.Collection.extend({ 
    model: Document, 

    match_username: function() { 
    var username = 'foo' 
    // match username to author... 
    }) 
    } 
}); 

總之,我將通過authors陣列爲集合中的每個文檔進行過濾,以檢查是否有一個用戶名匹配。如果用戶名匹配,則獲得num並存儲在新的數組中以返回。

什麼是最有效的方法呢?

回答

1

如果我理解正確的話,這聽起來像你需要的是:

var DocumentCollection = Backbone.Collection.extend({ 
    model: Document, 

    match_username: function() { 
     var username = 'foo' 
     return this.chain().filter(function(doc) { 
      return _.indexOf(doc.get('authors'), username) > -1; 
     }).map(function(doc) { 
      return doc.get('num'); 
     }).value(); 
    } 
}); 

它在authors使用_.indexOf,然後_.map對過濾收集num過濾。

fiddle

+0

@kailey謝謝!這真的很好。我認爲你使用Underscore很多。除了文檔,你能推薦任何好的資源或教程來真正學習它的最佳部分嗎? –

+0

@EvanEmolo這是一個很好的問題。我主要通過查看其他人的源代碼來學習。 [Marionette](https://github.com/marionettejs/backbone.marionette)有一些好東西。希望我對你有更好的答案。我會說,在我更好地理解如何使用它之前,我經歷了許多成長的痛苦。 – kalley