我有一个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”) } } }
我不想修复该错误,我只想忽略它并希望查询继续。有办法吗?
答案 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 }
}}
])