我是 Mongo 的新手,在将头撞在键盘上 3 天后,我已经接近了我想要的位置,但现在我想我可能只是误解了某些关键概念:
我正在尝试做的事情:
我有一个节点脚本,它非常频繁地从各种来源中提取提要项目并存储它们(标题、链接、来源、已处理:false)
我有另一个脚本随机提取记录,一次一个,使用它们,并更新处理:true
最终目标:项目在标题上应该是唯一的——如果在它不应该被写入数据库之前被看到,并且一旦它被处理过一次,就永远不会再被处理。
插入脚本:
key = {'title':title};
data = {'origin':origin, 'title':title, 'original_link':original_url, 'processed':false};
collection.update(key, data, {upsert:true}, function(err, doc) { ...
阅读脚本:
collection.findOne({processed:false}, function(err, doc){
if (err) throw err;
logger.info("Read out the following item from mongodb:...");
console.dir(doc);
thisId = doc._id;
markProcessed(thisId);
}
var markProcessed = function(id) {
collection.update({ _id:id },
{
$set: {'processed':true},
}, function(err, doc){
if (err) throw err;
logger.info("Marked record:"+id+" as processed");
console.dir(doc);
}
)
};
我试过使用 collection.ensureIndex({'title':1}, {unique:true}) 也没有成功。
由于这两个脚本并行运行,读取脚本最终会在已处理的记录上重复工作,尽管 markProcessed 函数昨天一直在工作,但今天却奇迹般地没有:)
我将非常感谢任何指导。