【问题标题】:Assertion Error: 1 == 0 for MongoDB deleteOne Command断言错误:1 == 0 for MongoDB deleteOne 命令
【发布时间】:2017-02-14 00:32:16
【问题描述】:

我正在尝试为我正在处理的 MongoDB/NodeJS/Express 应用程序锻炼一些 CRUD 操作,我在使用 deleteOne 命令时遇到了困难,可能是因为它无法识别我的查询,尽管我不知道为什么。

我从NodeJS driver documentation 中提取了 mongoDB 代码,我的代码块如下所示:

删除请求:

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:

console.log(db) 返回以下内容:

console.log(db):

{ 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 } }

我认为这意味着 Mongo 集合本身也被识别,因为它没有返回 undefined

任何关于我的错误的建议将不胜感激。

【问题讨论】:

  • 您需要先将req.params.id 转换为ObjectId 类型,即var ObjectID = require('mongodb').ObjectID; var id = new ObjectID(req.params.id);

标签: node.js mongodb express


【解决方案1】:

本机 mongodb 库需要 _idObjectId

最终结果看起来更像这样:

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();
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-28
    • 1970-01-01
    相关资源
    最近更新 更多