2016-08-02 1 views
2

je trouve des documents de MongoDB en utilisant pilote Ruby, les collectionne à tableau et itérer sur eux pour mettre à jour le même document que dans le code ci-dessous:mongo curseur Ruby Driver pas trouvé d'erreur

crawlarray = @@mongoclient[:crawlarray].find({searchresults:[]},:timeout => false).limit(500) 
crawlarray.each do |elm| 
    finalsearchstring = elm['searchstring'] 
    if elm["searchresults"].blank? 
     ap "SEARCHING: #{finalsearchstring}" 
     results = searchG(finalsearchstring) 
     elm["searchresults"] = results 
     @@mongoclient[:crawlarray].update_one({"_id" => elm['_id']}, elm) 
    else 
     ap "ALREADY SEARCHED: #{finalsearchstring}" 
    end 
end 

Il y a 90K dossiers, mais comme vous voyez, je reçois juste 500 pour ne pas obtenir l'erreur. Chaque fois, après environ 150 itérations, j'ai cette erreur;

D, [2016-08-02T22:32:08.853065 #10098] DEBUG -- : MONGODB | 127.0.0.1:27017 | posluga-dev.getMore | FAILED | Cursor not found, cursor id: 463388278686 (43) | 0.008009s 
/Users/apple/.rvm/gems/ruby-2.2.1/gems/mongo-2.2.7/lib/mongo/operation/result.rb:256:in `validate!': Cursor not found, cursor id: 463388278686 (43) (Mongo::Error::OperationFailure) 
    from /Users/apple/.rvm/gems/ruby-2.2.1/gems/mongo-2.2.7/lib/mongo/operation/executable.rb:36:in `block in execute' 
    from /Users/apple/.rvm/gems/ruby-2.2.1/gems/mongo-2.2.7/lib/mongo/server/connection_pool.rb:107:in `with_connection' 
    from /Users/apple/.rvm/gems/ruby-2.2.1/gems/mongo-2.2.7/lib/mongo/server/context.rb:63:in `with_connection' 
    from /Users/apple/.rvm/gems/ruby-2.2.1/gems/mongo-2.2.7/lib/mongo/operation/executable.rb:34:in `execute' 
    from /Users/apple/.rvm/gems/ruby-2.2.1/gems/mongo-2.2.7/lib/mongo/cursor.rb:163:in `block in get_more' 
    from /Users/apple/.rvm/gems/ruby-2.2.1/gems/mongo-2.2.7/lib/mongo/retryable.rb:51:in `call' 
    from /Users/apple/.rvm/gems/ruby-2.2.1/gems/mongo-2.2.7/lib/mongo/retryable.rb:51:in `read_with_retry' 
    from /Users/apple/.rvm/gems/ruby-2.2.1/gems/mongo-2.2.7/lib/mongo/cursor.rb:162:in `get_more' 
    from /Users/apple/.rvm/gems/ruby-2.2.1/gems/mongo-2.2.7/lib/mongo/cursor.rb:88:in `each' 
    from /Users/apple/.rvm/gems/ruby-2.2.1/gems/mongo-2.2.7/lib/mongo/collection/view/iterable.rb:44:in `each' 

Quelqu'un peut-il m'aider à le régler?

+0

Peut-être que cette réponse aide: http://stackoverflow.com/a/19987687 en ajoutant fondamentalement un '.no_timeout' lors de l'extraction d'objets comme' FbCheckin.where (...). No_timeout.each' – Miguelgraz

Répondre

2

Utilisez l'option 'no_cursor_timeout' avec la requête de recherche lors de l'utilisation de Mongo Ruby Driver.

Cela désactivera tous les délais d'attente du curseur. Par défaut, MongoDB tente de tuer tous les curseurs inactifs depuis plus de 10 minutes. Pour plus d'informations, vérifiez cette post.