【发布时间】:2016-05-27 05:13:29
【问题描述】:
我正在使用 mongoDB 并尝试按 ID 更新项目。 现在,我认为 ID 不知何故是字符串(使用原始 nodeJS 驱动程序创建,而不是使用猫鼬或任何东西)。
我可以使用 mongo CLI 修改项目,但不能从 nodeJS 驱动程序修改。
来自 JS(打字稿实际上因此等待)
let result = await TrainingModel.updateById(data._id, updater);
logger.debug("update:", data._id, updater, result);
给我记录器:
update: 5747430d63a8ccca38123556 { '$set': { trigger: 'ABC' } } { ok: 1, nModified: 0, n: 0 }
来自 mongo CLI:
db.getCollection('TrainingModel').find( {_id: "5747430d63a8ccca38123556" } )
{ "_id" : "5747430d63a8ccca38123556", "topic" : "dc*", "text" : "/image dc-kid", "trigger" : "bumx", "use" : "1", "keyword" : "kid", "isq" : "0" }
> db.getCollection('TrainingModel').update( {_id: "5747430d63a8ccca38123556" }, { '$set': { trigger: 'XYZ' } } )
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.getCollection('TrainingModel').find( {_id: "5747430d63a8ccca38123556" } )
{ "_id" : "5747430d63a8ccca38123556", "topic" : "dc*", "text" : "/image dc-kid", "trigger" : "XYZ", "use" : "1", "keyword" : "kid", "isq" : "0" }
>
所以更新确实发生了。
知道什么可能会阻止 mongo 驱动程序的行为与 CLI 不同吗?
$ npm list | grep mongo
├─┬ mongodb@2.1.17
│ ├─┬ mongodb-core@1.3.17
├─┬ mongoose@4.4.17
│ ├─┬ mongodb@2.1.18
│ │ ├─┬ mongodb-core@1.3.18
$ mongo --version
MongoDB shell version: 3.2.4
【问题讨论】:
-
想通了。我们的内部库正在转换为 ObjectID,而来自 JSON 数据的导入器正在将 ID 转换为字符串。