如何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 ); }
查询中第一个匹配的索引保存在$
。 然后用它来更新数组中的特定元素。