2017-06-28 1 views
0

I MongoDB shell version: 3.0.7 und in der Mitte einer langen Abfrage (Doppel forEach ~ 30k * 230k Einträge) die Abfrage Stopp und ich bekam CursorNotFoundMongoDB: CursorNotFound in der Mitte einer Abfrage

Hier bin mit der Abfrage.

db.EUCtrCopy.find().forEach(function (data){ 
    db.USFull.find({$or:[{"clinical_study.brief_title" : data.ASection.FullTitle },{"clinical_study.official_title" : data.ASection.FullTitle },{"clinical_study.id_info.org_study_id" : data.ASection.SponsorProtocolNumber}]}).forEach(function (val) { 
     db.USEUOverlap.insert({"USId": val._id, "EUId" : data._id}) 
     print("It's a match ! ("+data._id+")"); 
    }); 
}); 

ich gelesen, dass, wenn Sie in der MongoDB Shell im Leerlauf Sie das CursorNotFound Problem haben kann. Aber es passiert genau in der Mitte der Abfrage. Wie kann ich von diesem Fehler erfahren?

Danke.

+1

Dies ist nicht der So etwas solltest du in der Shell ausführen. Wenn es keinen bestimmten Grund gibt, warum Sie das nicht tun können, sollten Sie zumindest auf MongoDB 3.2 upgraden und [$ lookup'] verwenden (https://docs.mongodb.com/manual/reference/operator/aggregation/lookup/) und ['$ out'] (https://docs.mongodb.com/manual/reference/operator/aggregation/out/) und lassen Sie alles auf dem Server selbst geschehen. –

+1

Wenn Sie nicht upgraden können, verwenden Sie ['.addOption()'] (https://docs.mongodb.com/v3.0/reference/method/cursor.addOption/#cursor.addOption) mit ['DBQuery.option. noTimeout "] (https://docs.mongodb.com/v3.0/reference/method/cursor.addOption/#DBQuery.Option.noTimeout). Aber der erste Vorschlag ist der weitaus vernünftigere Ansatz. –

+0

Danke @ neil-lunn, was meinst du damit, nicht in der Shell zu laufen. Wie kann ich ? "mongo Database --eval script.js" Aktualisiert auf 3.4 CE. –

Antwort

2

Verwenden Aggregation für EUCtrCopy Sammlung verwenden $lookupUSFull mit einem Feld von den lokalen Bereich zu geben und ausländisches Feld dann $filter hinzufügen, um den Ruhezustand zu tun schließlich in dieser Pipeline mit $out Pipeline verwendet USEUOverlap das Ergebnis zu erhalten als eine Sammlung

Als Referenz $filter $lookup

+0

Vielen Dank. Werde das versuchen –