2015-03-02 67 views
1

我有一個收集如下MongoDB數據庫:如何創建MongoDB的子文檔動態

var mongoose = require('mongoose'); 
var journalSchema = mongoose.Schema({ 
    title : String, 
    journalid: {type:String, index: { unique: true, dropDups: true }}, 
    articleCount : type:Number, default:1, 
}); 
module.exports = mongoose.model('Journal', journalSchema); 

現在,我的數據庫越來越大,我想有一個「篇數」字段每年

我可以做一個數組作爲跟隨years : [{articleCount : Number}]通過訪問journal.years[X]某一特定年份它填平,其中X對應於0 1997年,1 1998年,等等。

然而,我的數據是動態報廢並且我想在我的快遞服務器中有一個功能,其中articleCount根據年份增加。

例如:

function updateYear(journalid, year, callback) { 
    Journal.findOneAndUpdate(
    {'journalid':journalid}, 
    {$inc : {'articleCount' : 1}}, // DO SOMETHING WITH year HERE 
    function() { 
     callback(); 
    }); 
} 

這確實增加了文章計數,但我不知道在哪裏包括「年」 ...

什麼是這樣做的最快的方法,知道我必須通過相當多的文章(1000萬以上)獲取,我希望能夠有效地獲得/更新給定年份的文章數量。

希望我很清楚,謝謝!

回答

1

讓你的陣列的一組對象與去年和計數:

journalYears: [ 
    { 
     year: String, // or Number 
     count: Number 
    } 
] 

例如

journalYears: [ 
    { year: "2014", count: 25 }, 
    { year: "2015", count: 15 } 
] 

然後爲你更新:

function updateYear(journalId, year, callback) { 
    Journal.findOneAndUpdate(
     {_id: journalId, "journalYears.year": year}, 
     { $inc: { "journalYears.$.count": 1 } }, 
     callback 
    ); 
} 

從您的查詢的第一場比賽的索引保存在$。然後用它來更新數組中的特定元素。

+0

這很完美,我錯過了'$'!非常感謝你! – Baloo 2015-03-03 06:44:10