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 运算符。