我正在使用 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
子文档,您可以在 WriteResult上调用
对象:getWriteError()
> 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/