如何在 mongodb 上动态创建子文档
How to create subdocument on mongodb dynamically
我有一个 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);
现在我的数据库在不断增长,我希望每年有一个 "articles count" 字段 。
我可以按照 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();
});
}
这确实增加了文章数量,但我不知道在哪里包含 "year"...
最快的方法是什么,我知道我必须获取大量文章(超过 1000 万篇)并且我希望能够 get/update 文章计数有效地给定了一年。
希望我说得够清楚,谢谢!
让你的数组成为一组带有年份和计数的对象:
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
);
}
您查询的第一个匹配项的索引保存在 $
中。然后用于更新数组中的特定元素。
我有一个 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);
现在我的数据库在不断增长,我希望每年有一个 "articles count" 字段 。
我可以按照 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();
});
}
这确实增加了文章数量,但我不知道在哪里包含 "year"...
最快的方法是什么,我知道我必须获取大量文章(超过 1000 万篇)并且我希望能够 get/update 文章计数有效地给定了一年。
希望我说得够清楚,谢谢!
让你的数组成为一组带有年份和计数的对象:
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
);
}
您查询的第一个匹配项的索引保存在 $
中。然后用于更新数组中的特定元素。