Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mongodb Mongo-新的vs处理方法_Mongodb_Unique - Fatal编程技术网

Mongodb Mongo-新的vs处理方法

Mongodb Mongo-新的vs处理方法,mongodb,unique,Mongodb,Unique,我是Mongo的新手,在3天的时间里我的头撞在键盘上,我已经接近了我想要的位置,但现在我想我可能只是误解了某些关键概念: 我想做的是: 我有一个节点脚本,它非常频繁地从各种源中提取提要项并存储它们(title、link、origin、processed:false) 我有另一个脚本,一次随机抽取一个记录,使用它们并更新处理后的记录:true 最终目标:项目的标题应该是唯一的——如果在将其写入数据库之前已经看到,并且一旦处理了一次,就不应该再进行处理 插入脚本: key = {'title':ti

我是Mongo的新手,在3天的时间里我的头撞在键盘上,我已经接近了我想要的位置,但现在我想我可能只是误解了某些关键概念:

我想做的是:

我有一个节点脚本,它非常频繁地从各种源中提取提要项并存储它们(title、link、origin、processed: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函数昨天一整天都在工作,但今天却奇迹般地没有:)


我将非常感谢任何指导

插入脚本有问题。当您使用并且数据库中已有一个具有相同密钥的文档时,该文档将被新文档覆盖。唯一索引不能防止这种情况,因为集合中不存在同时具有相同标题的两个文档

如果不想覆盖现有记录,则在插入的文档违反唯一索引时,使用该记录将失败