Привет, у меня есть следующая коллекция
var articles = [
{
"title": "Article title1",
"content": "Article ... content......... 1. ",
"url": "http://matt.wordpress.com/article/X",
"last_fetched_time": new Date();
},
{
"title": "Article title2",
"content": "Article ... content......... 2. ",
"url": "http://matt.blogger.com/article/Y",
"last_fetched_time": new Date();
}
];
db.collection('articles').insert(articles, {safe:true}, function(err, result) {}); //articles collection created
Я хочу периодически получать каналы блога из нескольких конечных точек параллельно, добавлять новые статьи в коллекцию и обновлять последнее выбранное поле даты и времени существующих статей в коллекции. Если я не прошу слишком многого, я также хочу, чтобы обратный вызов upsert возвращал только новые вставленные статьи.
//fetch articles periodically
fetchArticles = function(req, res) {
async.parallel([
//fetch word press endpoint
//get "title", "content", "url"
//set last_fetched_time with new Date();
//fetch blogger endpoint
//get "title", "content", "url"
//set last_fetched_time with new Date();
],
function(err, results) {
//merge results[0] and results[1] in a batch =[]
//if the article url is not already in the collection, insert article into the articles collection
//if the article url is found in the collection, update article because last_fetched_time changed
//finally return only new inserted articles, not updated ones
db.collection('articles').update(batch, {safe:true, upsert : true}, function(err, result) {
//result = only new articles inserted
});
});
}
поле URL должно быть уникальным, и я сделал
db.articles.ensureIndex({"url":1}, {unique: true, sparse:true, dropDups: true});
Проблема в том, что этот код не вставляет новые статьи