代码之家  ›  专栏  ›  技术社区  ›  Aliaaa

MongoDB按regex条件添加字段

  •  1
  • Aliaaa  · 技术社区  · 6 年前

    { 
        "_id" : ObjectId("5b6fbcb328d62424ece9265b"), 
        "name" : "abc"
    }
    { 
        "_id" : ObjectId("5b6fbcbd28d62424ece9265c"), 
        "name" : "cde"
    }
    

    我想添加一个字段 hasA name 聚合查询中的字段,因此我的预期输出应如下所示:

    { 
        "_id" : ObjectId("5b6fbcb328d62424ece9265b"), 
        "name" : "abc",
        "hasA" : true
    }
    { 
        "_id" : ObjectId("5b6fbcbd28d62424ece9265c"), 
        "name" : "cde",
        "hasA" : false
    }
    

    我已测试此聚合查询,但它返回错误的输出:

    $addFields
    {
        "hasA": { $cond : [ {name : /a/}, true, false ] }
    }
    

    { 
        "_id" : ObjectId("5b6fbcb328d62424ece9265b"), 
        "name" : "abc", 
        "hasA" : true
    }
    { 
        "_id" : ObjectId("5b6fbcbd28d62424ece9265c"), 
        "name" : "cde", 
        "hasA" : true
    }
    

    我已经用这个查询测试了很多数据,但它似乎总是返回true作为结果。

    1 回复  |  直到 6 年前
        1
  •  1
  •   mickl    6 年前

    不能在聚合框架中使用正则表达式(JIRA ticket here ). 如果只需要检查字符串是否包含可以使用的子字符串 $indexOfBytes 返回的运算符 -1

    db.col.aggregate([
        {
            $addFields: {
                "hasA": { $cond : [ { $eq: [ { $indexOfBytes: [ "$name", "a" ] }, -1 ] }, false, true ] }
            }
        }
    ])