【发布时间】: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);