MongoDB 奇怪的 writeResult 行为

标签 mongodb mongo-shell

我正在使用 mongodb (v2.6.7) 和 mongo (2.6.7) shell 客户端。

我正在尝试使用插入和更新命令返回的 WriteResult 对象。

根据 mongodocs如果出现错误,它会返回一个带有 writeError 子文档的 writeResult 对象。但我无法在 shell 或 mongo 的 javascript 文件中访问此子文档。

下面是我的问题的说明。

  • 我插入一个对象并获得成功的 writeResult。
  • 然后我使用相同的 _id 再次插入,并且在正确设置了“writeError”的屏幕上正确打印了 writeResult。
  • 当我使用 printjson() 方法打印 writeResult 对象时,它似乎也包含 writeError
  • 但是当我用 JSON.stringify() 打印它时,我看不到“writeError”。
  • 另外,writeResult.writeError 未定义,因此我无法访问其 writeResult.writeError.code 属性。

有人可以解释为什么会发生这种情况以及正确的方法是什么。


afv:PRIMARY>writeResult=db.sysinfo.insert({_id:"myid",otherData:"otherDataValue"})

WriteResult({ "nInserted" : 1 })

afv:PRIMARY>writeResult=db.sysinfo.insert({_id:"myid",otherData:"otherDataValue"})

WriteResult({
    "nInserted" : 0,
    "writeError" : {
        "code" : 11000,
        "errmsg" : "insertDocument :: caused by :: 11000 E11000 duplicate key error index: afvadmin.sysinfo.$_id_  dup key: { : \"myid\" }"
    }
})

afv:PRIMARY> printjson(writeResult)
{
    "nInserted" : 0,
    "writeError" : {
        "code" : 11000,
        "errmsg" : "insertDocument :: caused by :: 11000 E11000 duplicate key error index: afvadmin.sysinfo.$_id_  dup key: { : \"myid\" }"
    }
}

afv:PRIMARY> JSON.stringify(writeResult);
{"nInserted":0,"nUpserted":0,"nMatched":0,"nModified":0,"nRemoved":0}

afv:PRIMARY> writeResult.writeError

afv:PRIMARY> writeResult.nInserted
0

afv:PRIMARY> writeResult.writeError.code
2015-02-02T16:34:42.402+0530 TypeError: Cannot read property 'code' of undefined

afv:PRIMARY> writeResult["writeError"]

最佳答案

我不知道为什么要这样实现,但是要访问包含的 writeError 子文档,您可以在 WriteResultgetWriteError()对象:

> writeResult.getWriteError()
WriteError({
  "index": 0,
  "code": 11000,
  "errmsg": "insertDocument :: caused by :: 11000 E11000 duplicate key error index: test.test.$_id_  dup key: { : \"myid\" }",
  "op": {
    "_id": "myid",
    "otherData": "otherDataValue"
  }
})

> writeResult.getWriteError().code
11000

我找不到这方面的任何文档。我通过在 shell 中键入 writeResult. 后按两次 Tab 来查看可用内容。

关于MongoDB 奇怪的 writeResult 行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28276784/

相关文章:

javascript - 如何在 mongo shell 中显示 "require(module)"

mongo-shell - 如何在 Linux mongosh 命令行上指定数据库以及身份验证

javascript - 蒙哥错误: failed to connect to server [localhost:27017]

MongoDB、NUMA 硬件、页面错误但有足够的 RAM 用于工作集、touch 命令或 vmtouch/dd 未加载到内存中

mongodb - 更新 mongodb 依赖后出现警告

mongodb - 如何使用副本集以安静模式进行 mongo shell

java - 如何使用现有集合 mongodb 中的计算数据创建新集合

Python-eve GET 响应不包含资源内容(除非我指定它的模式)

mongodb - Morphia 通过引用 ObjectID 查询

mongodb - mongoDb中键值的顺序