MongoDB $正则表达式查询"结束"特别的焦点

时间:2015-12-15 13:25:08

标签: java regex mongodb

我无法从名为Matrix的数组中删除密钥匹配

的对象
 BasicDBObject where = new BasicDBObject();
    where.put("INSTITUTION_ID", instid);
    where.put("RuleID", ruleid);

    BasicDBObject obj1 = new BasicDBObject();
    obj1.put("Matrix.Key",new BasicDBObject("$regex","/"+json.getString("Code")+"$/"));

collection.update(where,new BasicDBObject("$pull", obj1));

上面的代码不是从数组中删除对象。阵列的结构可以在下面找到

"Matrix" : [
        {
            "Key" : "6M",
            "value" : "Queue"
        },
        {
            "Key" : "6N",
            "value" : "Queue"
        },
        {
            "Key" : "6O",
            "value" : "Queue"
        }]

1 个答案:

答案 0 :(得分:3)

命令行客户端

我建议在用Java表示法编写查询之前,首先使用常规JavaScript语法在mongo控制台中测试它们。以下查询适用于我。

数据

db.matrix.insert(
{
    INSTITUTION_ID: 1,
    RuleID: 2,
    Matrix: [
        {
            "Key": "6M",
            "value": "Queue"
        },
        {
            "Key": "6N",
            "value": "Queue"
        },
        {
            "Key": "6O",
            "value": "Queue"
        }
    ]
})

查询

db.matrix.update(
{
    INSTITUTION_ID: 1,
    RuleID: 2,
},
{
    $pull:
    {
        Matrix:
        {
            Key:
            {
                $regex: /M$/
            }
        }
    }
})

更新后的数据

{
    "INSTITUTION_ID" : 1.0000000000000000,
    "RuleID" : 2.0000000000000000,
    "Matrix" : [ 
        {
            "Key" : "6N",
            "value" : "Queue"
        }, 
        {
            "Key" : "6O",
            "value" : "Queue"
        }
    ]
}

的Java

我不确定如何在Java中表示此更新查询,但请尝试以下操作:

BasicDBObject where =
    new BasicDBObject()
        .put("INSTITUTION_ID", instid);
        .put("RuleID", ruleid);

BasicDBObject update =
    new BasicDBObject("$pull",
        new BasicDBObject("Matrix",
            new BasicDBObject("Key",
                new BasicDBObject("$regex",
                    java.util.regex.Pattern.compile(json.getString("Code") + "$")))));

collection.update(where, update);