2016-06-22 8 views
0

Ich versuche, einen Datensatz aus MongoDB mit nodeJS zu entfernen. Aber der Datensatz wird nicht gelöscht.Datensatz kann nicht aus mongoDB entfernt werden. Knoten

finden Sie den Code unten:

exports.remove = function(studentId, cb) { 
var collection = db.get().collection('students'); 
collection.remove({_id: studentId}, function(err) { 
    if (err) { 
     throw err; 
    } 
    else { 
    cb(err); 
    console.log("Record deleted."); 
    } 
}); 
} 

ich die StudentID mit ObjectID versucht haben() wie folgt:

exports.remove = function(studentId, cb) { 
var collection = db.get().collection('students'); 
collection.remove({_id: new mongodb.ObjectID(studentId)}, function(err) { 
    if (err) { 
     throw err; 
    } 
    else { 
    cb(err); 
    console.log("Record deleted."); 
    } 
    }); 
    } 

Aber immer einen Fehler wie: „Fehler: Argument in bestandener sei eine einzelne Zeichenfolge von 12 Bytes oder eine Zeichenfolge von 24 hex Zeichen " Bitte helfen Sie bei dieser Frage !!!!!

+0

Nicht wie ein Schwachkopf klingen, aber" Datensätze "existieren nicht in MongoDB. Sie heißen 'Dokumente'. Was ist dein ID-Typ? – DevNebulae

+0

@GamerNebulae Ich bin neu in NodeJS und MongoDB. Danke für die Information. Ich bin mir nicht sicher über den ID-Typ. Dies ist die Standard-ID, die von MongoDB beim Einfügen eines Dokuments generiert wird. Ich versuche, mit der gleichen generierten ID zu löschen. –

+0

Standardmäßig verwendet Mongo eine 'ObjectID'. – DevNebulae

Antwort

0

Wenn Sie Ihre remove-Funktion aufrufen, stellen Sie sicher, dass Sie eine tatsächliche Zeichenfolge als erstes Argument übergeben, keine numerische.

collection.remove({_id: studentId.toString()}, function(err) {... 
+0

Ich habe das versucht, aber der Datensatz wurde nicht aus der DB gelöscht. –

0
  1. zunächst, sollten Sie unnötige get() Methode zu db entfernen: var collection = db.collection('students');
  2. nächsten Schritt

    Oder in Ihrer Funktion remove, wie so StudentID in eine Zeichenfolge nicht entlassen new Stichwort, es ist nur in Ordnung, nur zu wickeln: collection.remove({_id: mongodb.ObjectID(studentId)}, function(err) {

+0

Ich verwende eine db.js zu DB connect und schließe und benutze get() Methode, um den aktuellen Stand der Verbindung zurückzugeben: exports.get = function() { return state.db } Ich habe die zweite versucht Schritt, aber es gibt den gleichen Fehler wie zuvor: "Fehler: Argument übergeben muss eine einzelne Zeichenfolge von 12 Bytes oder eine Zeichenfolge von 24 Hex-Zeichen sein" –

0

vielleicht die ID von dieser Methode der Erstellung helfen:

mongodb.ObjectID.createFromHexString(studentId); 

https://mongodb.github.io/node-mongodb-native/api-bson-generated/objectid.html

+0

Ich werde dies versuchen und Sie das gleiche wissen lassen. Danke –

+0

Ich versuchte das gleiche, aber immer das gleiche Problem. Während ich versucht habe, die _id und ihre Länge zu loggen, wird die Länge überraschend 25. Bitte finden Sie die _id eine Länge in der Konsole: _id: 576aba09090560f80bd2caaa Länge ----> 25 –

+0

Ich hatte auch dies Problem an einem Punkt, und ich konnte mit diesem lösen .. –

0

ich die Lösung für diese bekam, warum ich den Fehler war immer - „Fehler: Argument übergeben muss sein single String von 12 Bytes oder eine Zeichenfolge von 24 Hex-Zeichen "bei Verwendung von neuen mongodb.ObjectID (studentId). Ich möchte, dass dies mit uns allen geteilt wird.

Mein AngularJS Controller ist wie folgt:

mainApp.controller("deleteStudentController", function($scope,$http) { 
var resData = {}; 
$scope.student = {}; 
var urlGet = "/students/all"; 
$http.get(urlGet) 
.then(function(response) { 
$scope.students = angular.fromJson(response.data); 
}); 
$scope.deleteStudent = function(){ 
var urlDelete = "/students/remove:"+$scope.studentRadio; 
$http.delete(urlDelete) 
.success(function(response, status, headers, config){ 
    $scope.output = "Student successfully deleted."; 
}) 
.error(function(response, status, headers, config){ 
    $scope.output = "Error in processing. Please try again."; 
}); 
} 
}); 

In der obigen Steuerung können wir die URL als

var urlDelete = "/students/remove:"+$scope.studentRadio; 

sehen, die inturn meine Node-Controller ruft:

router.delete("/remove:studId", function(req,res){ 
Students.remove(req.params.studId, function(err) { 
if (err) { 
    throw err; 
} 
else { 
    var respOut = "Student deleted"; 
    res.send(respOut); 
} 
}); 
}); 

Die Winkelcode setzt den Endpunkt wie folgt:

Ich möchte das: da sein, so dass die URL etwas wie folgt aussehen:

/students/remove:576c1d4781aaa4f16a68af24 

Die Express-Route ist wie folgt:

router.delete("/remove:studId", ...) 

: ist ein Sonderzeichen in Express-Routen (es deklariert einen benannten Parameter namens studId).Dies bedeutet, dass die Route alles nach/remove als den Wert von studId nimmt, einschließlich des Doppelpunkts, der in der URL ist. Also req.params.studId ist: 576c1d4781aaa4f16a68af24, die eine Länge von 25 Zeichen hat.

Wenn wir diese Art von URL-Schema verwenden wollen, müssen wir den Doppelpunkt machen, indem es entweicht ein Teil des Spiels zu sein (so verliert es seine besondere Bedeutung):

router.delete ("/ entfernen \ :: studId ", ...)

Verwandte Themen