从CLI运行良好的mongo节点驱动程序更新项目时遇到问题:)

时间:2016-05-26 20:58:04

标签: node.js mongodb mongoose

我正在使用mongoDB并尝试按ID更新项目。 现在,我认为ID是字符串(通过使用原始nodeJS驱动程序创建,而不是使用mongoose或任何东西)。

我可以使用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

1 个答案:

答案 0 :(得分:0)

_id不再是mongo中的字符串,它是mongodb驱动程序中的对象类型ObjectId,因此不需要传入需要传递的字符串

new ObjectId(" stringid")

注意:请确保引入objectID

从' mongodb'导入{MongoClient,ObjectId}

确保使用mongoclient.connect()获取对db的引用,然后在回调中获取db后使用db.collection(" collectionName",callback(err,col))。现在在回调中你有你的集合,在哪种情况下你可以做col.findOneAndUpdate()。

确保您使用的ID是ObjectId。