java - MongoDB $regex 查询 "end with"特定字符

标签 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"
        }]

最佳答案

命令行客户端

我建议在用 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);

关于java - MongoDB $regex 查询 "end with"特定字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34290473/

相关文章:

java - gradle:没有源任务 ':processTestResources'和 ':processtResources'

java - 同步方法与 block 的性能

python - MongoDB 需要安装才能与 pymongo 一起使用吗?

java - Morphia:将 DBObject 转换为实体

java - OpenEJB 独立版 — 非 JMS MDB 部署失败

java - 如何使用 Apache PDFBox 从 PDF 文件中提取文本

javascript - 如何使用 jQuery 从字符串中提取图像标签?

regex - 如何从 C 在 Perl 5.12 中创建 qr//?

c# - 如何拆分仅由空格分隔的名称列表(带有标题和姓氏)?

mongodb - 为什么 MongoDB 中的覆盖查询有时会变慢?