MongoDb 无法从 $ifNull 获取结果
MongoDb cannot get result from $ifNull
我正在使用以下脚本将引号更新为保存在 4 字符串数组中的字符串中的转义字符,但无法使 $ifnull 起作用。尝试过各种形式,最新的是:
var myCursor = db.collection.Fence.find( { "properties.d.v" : { $regex : '.*".*'} } );
while (myCursor.hasNext())
{
printjson( myCursor.next() );
var fence = myCursor.next();
var test;
test = { $ifNull: [ fence.properties.d.v[0], "null" ] }
print ( "0: ", test );
$cond: [ { $eq: [ test, "null" ] }, fence.properties.d.v[0], fence.properties.d.v[0].replace( '"', '\"' ) ];
test = { $ifNull: [ fence.properties.d.v[1], "null" ] }
print ( "1: ", test );
$cond: [ { $eq: [ test, "null" ] }, fence.properties.d.v[1], fence.properties.d.v[1].replace( '"', '\"' ) ];
test = { $ifNull: [ "fence.properties.d.v[2]", "null" ] }
print ( "2: ", test );
$cond: [ { $eq: [ test, null ] }, fence.properties.d.v[2], fence.properties.d.v[2].replace( '"', '\"' ) ];
test = { $ifNull: [ "fence.properties.d.v[3]", "null" ] }
print ( "3: ", test );
$cond: [ { $eq: [ test, null ] }, fence.properties.d.v[3], fence.properties.d.v[3].replace( '"', '\"' ) ];
db.au.com.bluedot.application.model.geo.Fence.update( { _id : fence._id }, fence );
}
即使 v[1] 为 null,测试变量仍然从 print 语句输出以下内容:
1: [object Object]
然后从替换语句返回以下错误:
2015-12-24T10:54:14.301+1100 TypeError: Cannot call method 'replace' of null
如果有更好或更简单的方法来查找和转义 MongoDb 中的引号,我们很乐意知道。
来自上面评论中的BatScream;您可以简单地通过检查
来替换
if(fence.properties.d.v[0]){//code to replace}
您不需要为此目的使用 mongoDB 运算符。
我正在使用以下脚本将引号更新为保存在 4 字符串数组中的字符串中的转义字符,但无法使 $ifnull 起作用。尝试过各种形式,最新的是:
var myCursor = db.collection.Fence.find( { "properties.d.v" : { $regex : '.*".*'} } );
while (myCursor.hasNext())
{
printjson( myCursor.next() );
var fence = myCursor.next();
var test;
test = { $ifNull: [ fence.properties.d.v[0], "null" ] }
print ( "0: ", test );
$cond: [ { $eq: [ test, "null" ] }, fence.properties.d.v[0], fence.properties.d.v[0].replace( '"', '\"' ) ];
test = { $ifNull: [ fence.properties.d.v[1], "null" ] }
print ( "1: ", test );
$cond: [ { $eq: [ test, "null" ] }, fence.properties.d.v[1], fence.properties.d.v[1].replace( '"', '\"' ) ];
test = { $ifNull: [ "fence.properties.d.v[2]", "null" ] }
print ( "2: ", test );
$cond: [ { $eq: [ test, null ] }, fence.properties.d.v[2], fence.properties.d.v[2].replace( '"', '\"' ) ];
test = { $ifNull: [ "fence.properties.d.v[3]", "null" ] }
print ( "3: ", test );
$cond: [ { $eq: [ test, null ] }, fence.properties.d.v[3], fence.properties.d.v[3].replace( '"', '\"' ) ];
db.au.com.bluedot.application.model.geo.Fence.update( { _id : fence._id }, fence );
}
即使 v[1] 为 null,测试变量仍然从 print 语句输出以下内容:
1: [object Object]
然后从替换语句返回以下错误:
2015-12-24T10:54:14.301+1100 TypeError: Cannot call method 'replace' of null
如果有更好或更简单的方法来查找和转义 MongoDb 中的引号,我们很乐意知道。
来自上面评论中的BatScream;您可以简单地通过检查
来替换if(fence.properties.d.v[0]){//code to replace}
您不需要为此目的使用 mongoDB 运算符。