2015-03-02 47 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