2017-02-13 2 views
0

Я пытаюсь выполнить некоторые из операций CRUD для приложения MongoDB/NodeJS/Express, над которым я работаю, и мне сложно с командой deleteOne, по-видимому, потому, что он не распознает мой запрос, хотя я не знаю почему.Ошибка утверждения: 1 == 0 для MongoDB команда deleteOne

Я поднял код MongoDB из NodeJS driver documentation, и мой блок кода выглядит следующим образом:

УДАЛИТЬ ЗАПРОС:

router.delete('/formula-list/:id', function(req, res){ 
    var db = req.db.collection('formulas'); 
    var id = req.params.id; 
    var query = { "_id": id }; 
    db.deleteOne(query, function(err, r){ 
    assert.equal(null, err); 
    assert.equal(1, r.deletedCount); 
    db.close(); 
    }); 
    res.end(); 
}); 

При запуске этого он возвращает ошибку AssertionError: 1 == 0, которую я беру означает, что программа не имеет документа для удаления.

Однако, если я делаю console.log(req.params.id) я получаю 587f6ff4824d0a085c2b57bf, который является _id для документа в моей базе данных:

MongoDB document

console.log(db) возвращает следующее:

console.log (дБ):

{ s: 
{ pkFactory: 
    { [Function: ObjectID] 
    index: 858167, 
    createPk: [Function: createPk], 
    createFromTime: [Function: createFromTime], 
    createFromHexString: [Function: createFromHexString], 
    isValid: [Function: isValid], 
    ObjectID: [Circular], 
    ObjectId: [Circular] }, 
db: 
    EventEmitter { 
    domain: null, 
    _events: {}, 
    _eventsCount: 0, 
    _maxListeners: undefined, 
    s: [Object], 
    serverConfig: [Getter], 
    bufferMaxEntries: [Getter], 
    databaseName: [Getter] }, 
topology: 
    EventEmitter { 
    domain: null, 
    _events: [Object], 
    _eventsCount: 7, 
    _maxListeners: undefined, 
    clientInfo: [Object], 
    s: [Object] }, 
dbName: 'formulas', 
options: { promiseLibrary: [Function: Promise], readConcern: undefined }, 
namespace: 'formulas.formulas', 
readPreference: 
    { _type: 'ReadPreference', 
    mode: 'primary', 
    tags: undefined, 
    options: undefined }, 
slaveOk: true, 
serializeFunctions: undefined, 
raw: undefined, 
promoteLongs: undefined, 
promoteValues: undefined, 
promoteBuffers: undefined, 
internalHint: null, 
collectionHint: null, 
name: 'formulas', 
promiseLibrary: [Function: Promise], 
readConcern: undefined } } 

Я принимаю это означает, что сама сборная Монго также признается, поскольку она не возвращается undefined.

Любые советы по поводу того, что я ошибаюсь, будут очень признательны.

+0

Вы должны бросить 'req.params.id' к первому, т.е. типа ObjectId 'var ObjectID = require ('mongodb'). ObjectID; var id = new ObjectID (req.params.id); ' – chridam

ответ

1

Native mongodb библиотека должна _id быть ObjectId

Конечный результат будет выглядеть более-менее, как это:

var mongo = require('mongodb'); 

// Other code lines 

router.delete('/formula-list/:id', function(req, res){ 
    var db = req.db.collection('formulas'); 
    var query = { "_id": new mongo.ObjectId(req.params.id) }; 
    db.deleteOne(query, function(err, r){ 
    assert.equal(null, err); 
    assert.equal(1, r.deletedCount); 
    db.close(); 
    }); 
    res.end(); 
}); 
Смежные вопросы