如何dynamic地在MongoDB上创build子文档

我有一个集合的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}]创build一个数组years : [{articleCount : Number}]并通过访问journal.years[X]来填充特定年份,其中X对应于1997年的0,1998年的1年等。

但是,我的数据dynamic报废,我想我的快递服务器中的一个functionarticleCount增加基于年份。

例如:

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

这确实增加了文章数量,但我不知道在哪里包括“年份”…

如果知道我必须通过相当多的文章(1000万以上)才能获得最快的方法,我希望能够有效地获得/更新给定年份的文章数量。

希望我很清楚,谢谢!

使您的数组成为一组具有一年和数量的对象:

 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 ); } 

查询中第一个匹配的索引保存在$ 。 然后用它来更新数组中的特定元素。