我有一个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对应于1997年的0,1998年的1等等。
但是,我的数据动态报废,我希望在我的快递服务器中有一个功能,articleCount
根据年份增加。
例如:
function updateYear(journalid, year, callback) {
Journal.findOneAndUpdate(
{'journalid':journalid},
{$inc : {'articleCount' : 1}}, // DO SOMETHING WITH year HERE
function() {
callback();
});
}
这确实增加了文章数,但我不知道在哪里包含“年”...
最快的方法是什么,知道我必须获取相当多的文章(1000万+),我希望能够有效地获得/更新给定年份的文章计数。
希望我很清楚,谢谢!
答案 0 :(得分:1)
使您的数组成为一组具有年份和计数的对象:
journalYears: [
{
year: String, // or Number
count: Number
}
]
e.g。
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
);
}
您查询中第一个匹配的索引保存在$
中。然后它用于更新数组中的特定元素。