2015-04-23 15 views
11

Gibt es eine Möglichkeit zu überprüfen, ob Mongodb Bulk einige Operationen vor dem Aufruf von .execute() darauf zu tun hat? Ich bin ziemlich sicher, dass ich einfügen keine leere Objekte senden, sondern halten diesen Fehler auf ein DokumentPrüfen, ob Bulk leer ist in MongoDB

Invalid Operation, No operations in bulk 

Hier ist ein Code:

bulk.find({"AcctSessionId":insert['AcctSessionId']}).upsert().update({$set:insert}); 

und legen Objekt wie dieses

sieht
{ AcctStatusTypeU: '3', 
    AcctSessionId: '1183628512-105130252', 
    h323setuptimeU: '<sip:[email protected]>', 
    h323connecttimeU: Sun Mar 08 2015 19:30:37 GMT+0100 (CET), 
    AcmeSessionEgressRealmU: '620', 
    AcmeSessionIngressRealmU: 'CORE_PSX' 
} 

Ich sehe meine Objekte eingefügt, aber immer noch diesen Fehler. Übrigens ist dies ein Nodejs-Treiber, über den ich spreche, und ich verwende "UnorderedBulkOp", um Dokumente einzufügen.

+0

Ich denke, es keine Methode gibt, diese Prüfung zu tun ... – vodich

Antwort

0

Sie einfach, ob ein Massenbetrieb überprüfen kann, hat Operationen auszuführen:

bulk 

kehrt ähnliche

{ "nInsertOps" : 0, "nUpdateOps" : 1, "nRemoveOps" : 0, "nBatches" : 1 } 

Der Grund, etwas, warum Ihr eigentlich Massenvorgang leer ist, weil Ihr h323connecttimeU eine hält illegaler Wert - Sie müssen die Datumszeichenfolge angeben.

Außerdem verwenden Sie die Massenoperation falsch. Es sollte

sein
bulk.find({"AcctSessionId":insert['AcctSessionId']}).upsert().updateOne(insert); 
+0

Nö, ist das Datum, fein ich es einfach kopiert, aber es ist wie new Date („date string“) instanziiert, nicht sicher, über den Upsert-Teil, da es so gut funktioniert, wird es testen. Wie verwenden Sie "Bulk" im Code. Meine Vermutung ist, dass Sie es verwenden, wie Sie in der Konsole geschrieben haben, oder? – vodich

+0

@ vodich Richtig, denn das ist MongoDBs [lingua franca] (https://en.wikipedia.org/wiki/Lingua_franca). Und Sie müssen Ihr 'Einfüge'-Dokument nicht einstellen, Sie müssen nur einzelne Felder setzen. –

7

Ich laufe auf das gleiche Problem. Prüfen bulk.length

if (bulk.length > 0) { 
    // run bulk operations 
}