Mongodb Mongo-新的vs处理方法
我是Mongo的新手,在3天的时间里我的头撞在键盘上,我已经接近了我想要的位置,但现在我想我可能只是误解了某些关键概念: 我想做的是: 我有一个节点脚本,它非常频繁地从各种源中提取提要项并存储它们(title、link、origin、processed:false) 我有另一个脚本,一次随机抽取一个记录,使用它们并更新处理后的记录:true 最终目标:项目的标题应该是唯一的——如果在将其写入数据库之前已经看到,并且一旦处理了一次,就不应该再进行处理 插入脚本:Mongodb Mongo-新的vs处理方法,mongodb,unique,Mongodb,Unique,我是Mongo的新手,在3天的时间里我的头撞在键盘上,我已经接近了我想要的位置,但现在我想我可能只是误解了某些关键概念: 我想做的是: 我有一个节点脚本,它非常频繁地从各种源中提取提要项并存储它们(title、link、origin、processed:false) 我有另一个脚本,一次随机抽取一个记录,使用它们并更新处理后的记录:true 最终目标:项目的标题应该是唯一的——如果在将其写入数据库之前已经看到,并且一旦处理了一次,就不应该再进行处理 插入脚本: key = {'title':ti
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函数昨天一整天都在工作,但今天却奇迹般地没有:)
我将非常感谢任何指导 插入脚本有问题。当您使用并且数据库中已有一个具有相同密钥的文档时,该文档将被新文档覆盖。唯一索引不能防止这种情况,因为集合中不存在同时具有相同标题的两个文档 如果不想覆盖现有记录,则在插入的文档违反唯一索引时,使用该记录将失败