我在MongoDB数据库中有一个名为Article
的集合,具有以下架构和模型:
var articleSchema = new Schema({
site: String,
date: String,
day: String,
link: {
type: String,
unique: true,
index: {unique:true}
});
var Article = mongoose.model('Article', articleSchema);
文档示例,其中还没有day
字段:
[ { site: 'www.atlantico.fr',
date: '2014-05-27T11:10:19.000Z',
link: 'http://www.atlantico.fr/example.html',
_id: 538473817eb00f082f4803fc,
__v: 0} ]
对于此集合的所有文档,我希望更新day
字段,具体取决于date
字段(以我知道的给定方式)。
我试过了:
Article.find() // all documents
.exec(function (err, articles) { // articles is an array
for (var i=0; i<articles.length; i++) { // for each document
var myDate = articles[i].date; // I take its date
myDate = myDate.replace(/^(\d{4})\-(\d{2})\-(\d{2}).*$/, '$3/$2/$1'); // I create a new variable
Article.update({date: articles[i].date}, // articles with this date
{day : myDate }, // update with the new variable created using the date
function(err, numberAffected){
});
}
});
如果我为给定文档运行此代码(通过在{link: 'http://www.atlantico.fr/example.html'}
中添加Article.find()
之类的条件,则可以正常运行。
但如果运行上面显示的代码,那应该是所有文档的工作,那一定有问题,因为那时我可以看到所有文档都没有更新。
我错过了什么?谢谢你的帮助。
答案 0 :(得分:1)
更新时,您无法参考文档中的字段。 您发布的答案似乎是要走的路。 请参阅此答案 Update MongoDB field using value of another field
答案 1 :(得分:0)
我看了http://mongoosejs.com/docs/2.7.x/docs/updating-documents.html,我尝试了这个:
Article.find({}, function (err, articles) {
for (var i=0; i<articles.length; i++) {
Article.findOne({ link: articles[i].link }, function (err, doc){
doc.day = doc.date.replace(/^(\d{4})\-(\d{2})\-(\d{2}).*$/, '$3/$2/$1');
doc.save();
});
}
});
似乎有效。
但我不知道这是否是最佳解决方案。