如何丢弃引发错误的记录?

时间:2019-01-10 18:20:33

标签: mongodb

我有一个MongoDB查询,我希望查询在出现一个错误后能够继续并跳过该记录。

我收到以下错误:

  

错误:getMore命令失败:{      “ operationTime”:时间戳(1547144095,335),      “ ok”:0,      “ errmsg”:“在$ convert中无法解析objectId,没有onError值:>解析为OID的字符串长度无效,预期为24,但发现为0”,      “代码”:241,      “ codeName”:“ ConversionFailure”,      “ $ clusterTime”:{          “ clusterTime”:时间戳(1547144095,335),          “签名”:{              “哈希”:BinData(0,“ aMqO7W + xnEbbUw6UsX / cxr2jxzo =”),              “ keyId”:NumberLong(“ 6626865028530176001”)          }      }   }

我不想修复该错误,我只想忽略它并希望查询继续。有办法吗?

1 个答案:

答案 0 :(得分:1)

假设测试数据如下:

 db.things.insert([{ myfield: ObjectId()}, { myfield:  "Some text"}])

通过与要转换的值的预期$type进行匹配,可以避免传递无效的字段值:

db.things.aggregate([
    { $match: {
        myfield: { $type: "objectId" }
    }},
    { $addFields: {
        converted: {
            $convert: { 
                input: "$myfield",
                to: "objectId",
            }
        }
    }},
])

或者,您可以将onError中的$convert值设置为可在聚合管道中使用的值(例如,使用$match$cond表达式):

db.things.aggregate([
    { $addFields: {
        converted: {
            $convert: { 
                input: "$myfield",
                to: "objectId",
                onError: 0
            }
        }
    }},
    { $match: {
        converted: { $ne: 0 }
    }}
])