【问题标题】:trouble updating items from mongo node driver where the CLI works well :)从 CLI 运行良好的 mongo 节点驱动程序更新项目时遇到问题:)
【发布时间】: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 转换为字符串。

标签: node.js mongodb mongoose


【解决方案1】:

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

new ObjectId("stringid")

注意:一定要带上objectID

从 'mongodb' 导入 {MongoClient, ObjectId}

确保您使用 mongoclient.connect() 来获取对您的数据库的引用,然后一旦您在回调中获取数据库,请使用 db.collection("collectionName", callback(err, col)。现在在回调中您有你的收藏,你可以做 col.findOneAndUpdate()。

只需确保您使用的 id 是 ObjectId。

【讨论】:

  • 从 CLI 输出中可以看出,它不是:"_id" : ObjectId("574764d332bec6f53b642d7a"),
  • 对不起,我试图在 cli 中查看,我没有看到您将其设为 ObjectId,这很好,字符串可以工作,至于为什么部分我相信 cli 驱动程序会接受该字符串或objectid
猜你喜欢
  • 1970-01-01
  • 2018-05-13
  • 1970-01-01
  • 1970-01-01
  • 2012-08-28
  • 2013-07-27
  • 2021-02-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多