getLastError attribute
On mongo shell the data modification operation not always generate any readable output to show what happened. The below trick can be used to:
- Find last operation status (success or failure).
- Find number of rows affected or changed ( the 'n' parameter )
- To find out if a new document was inserted during insert-update
- To find out how many documents were updated
> db.people.insert( { _id : "top", var : 2} ) E11000 duplicate key error index: students.people.$_id_ dup key: { : "top" } > db.runCommand( {getLastError : 1 } ) { "err" : "E11000 duplicate key error index: students.people.$_id_ dup key: { : \"top\" }", "code" : 11000, "n" : 0, "connectionId" : 1, "ok" : 1 } --- > db.people.insert( { _id : "mark", var : 3} ) > db.runCommand( {getLastError : 1 } ) { "n" : 0, "connectionId" : 1, "err" : null, "ok" : 1 } --- > db.people.update( {var : { $lt:3 } } , { $set : { var2: 0 } }, {multi: true} ) > db.runCommand( {getLastError : 1 } ) { "updatedExisting" : true, "n" : 2, "connectionId" : 2, "err" : null, "ok" : 1 } > db.people.find() { "_id" : "mark", "var" : 3 } { "_id" : "rado", "var" : 1, "var2" : 0 } { "_id" : "top", "var" : 2, "var2" : 0 } --- # showing bad example with wrong order of functions! > db.people.update( {var : 4} , { $set : { var2: 0 } }, { upsert: true } ) > db.people.find() { "_id" : "mark", "var" : 3 } { "_id" : "rado", "var" : 1, "var2" : 0 } { "_id" : "top", "var" : 2, "var2" : 0 } { "_id" : ObjectId("52ba26f9c1207a4a1fdeb3ae"), "var" : 4, "var2" : 0 } > db.runCommand( {getLastError : 1 } ) { "n" : 0, "connectionId" : 2, "err" : null, "ok" : 1 } --- # the same operation but with correct functions order > db.people.update( {var : 4} , { $set : { var2: 0 } }, { upsert: true } ) > db.runCommand( {getLastError : 1 } ) { "updatedExisting" : false, "upserted" : ObjectId("52ba2916c1207a4a1fdeb3b0"), "n" : 1, "connectionId" : 2, "err" : null, "ok" : 1 } > db.people.find() { "_id" : "mark", "var" : 3 } { "_id" : "rado", "var" : 1, "var2" : 0 } { "_id" : "top", "var" : 2, "var2" : 0 } { "_id" : ObjectId("52ba2916c1207a4a1fdeb3b0"), "var" : 4, "var2" : 0 } --- > db.people.update( {} , { $set : { var2: 1 } }, { multi: true } ) > db.runCommand( {getLastError : 1 } ) { "updatedExisting" : true, "n" : 4, "connectionId" : 2, "err" : null, "ok" : 1 } > db.people.find() { "_id" : "rado", "var" : 1, "var2" : 1 } { "_id" : "top", "var" : 2, "var2" : 1 } { "_id" : ObjectId("52ba26f9c1207a4a1fdeb3ae"), "var" : 4, "var2" : 1 } { "_id" : "mark", "var" : 3, "var2" : 1 }
No comments:
Post a Comment