Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何获取文档,其中任何字段值都与MongoDB Java中列出的任何表达式匹配_Java_Regex_Mongodb - Fatal编程技术网

如何获取文档,其中任何字段值都与MongoDB Java中列出的任何表达式匹配

如何获取文档,其中任何字段值都与MongoDB Java中列出的任何表达式匹配,java,regex,mongodb,Java,Regex,Mongodb,我正在尝试获取集合中的所有文档,其中任何文档字段都可以与列出的任何正则表达式匹配 考虑以下情况 用户可以在集合中创建具有不同字段名称的文档 比如 document1 = >{ "_id":1, "card" : 1234 , "status": 4} document2 => {"_id": ***, "Housenumber" : 356/78 , "value" : null} ------ documentn =>{ "_id" : ObjectId("4ecd2e33d

我正在尝试获取集合中的所有文档,其中任何文档字段都可以与列出的任何正则表达式匹配

考虑以下情况

用户可以在集合中创建具有不同字段名称的文档

比如

document1 = >{ "_id":1, "card" : 1234 , "status": 4}
document2 => {"_id": ***, "Housenumber" : 356/78 , "value" : null}
------
documentn =>{ "_id" : ObjectId("4ecd2e33dd68c9021e453d12"), "searchword" : "win" }
------
集合中所有文档的字段名都不相同

正则表达式可以是:“/^(^456$| ^win$…..等)/”

我尝试动态获取密钥并按如下所述查找查询:

          ----------
         table = db.getCollection(coll);        
        DBObject dataKeys = table.findOne();            
        Set<String> keys = dataKeys.keySet();
        Iterator<String> iterator = keys.iterator();
        while(iterator.hasNext()){
          String key = iterator.next();             
        regexQuery.put(**key**, new BasicDBObject("$regex", "^((^(([0-9]{4}[-. _]?)$)|"
                + "(^[a-zA-Z0-9._%+-]...........................0-9]$$").append("$options", "i"));    
            DBCursor cursor = table.find(regexQuery);
            while (cursor.hasNext()) {
                System.out.println(cursor.next());
----------
table=db.getCollection(coll);
DBObject dataKeys=table.findOne();
Set keys=dataKeys.keySet();
迭代器迭代器=keys.Iterator();
while(iterator.hasNext()){
String key=iterator.next();
regexQuery.put(**键**,新的BasicDBObject($regex)”,“^(^(([0-9]{4}[-.\u]?)$)|”
+“(^[a-zA-Z0-9.uz%+-]……………..0-9]$$”。附加(“$选项”,“i”);
DBCursor=table.find(regexQuery);
while(cursor.hasNext()){
System.out.println(cursor.next());
我可以看到键值是正确的,但它没有获取匹配的文档


我是MongoDB的新手,在谷歌搜索之后,我遵循了上述方法。

如果您希望在字段名(而不是值)上进行正则表达式匹配,那么使用
$objectToArray
将字段名(LHS)转换为表达式值(RHS):


如果要在字段名(而不是值)上进行正则表达式匹配,请使用
$objectToArray
将字段名(LHS)转换为表达式值(RHS):


您好,Moschetti,感谢您的及时回复,我正在查找字段值上的正则表达式匹配项,而不是名称上的正则表达式。基本上,我需要列出所有具有与列表中任何正则表达式匹配的值的文档,而不管它们存在于哪个字段中。将x.k上的$match更改为x.v,您就有了解决方案。:-)您好,Moschetti,我正试图在Mongo Java.AggregateItableOutput=collection.aggregate(Arrays.asList(新文档($project),新文档($x),新文档($objectToArray,“$$CURRENT”)),新文档($unwind“,“$x”),新文档($match),新文档($x.k),新文档($in),新基本文档($regex)”,“^(ISBN(-10)?:?)?([-0-9xX]{13}|[0-9X]{10})$”))());但这不起作用。您好,Moschetti,谢谢您的及时回复,我正在查找字段值而不是名称上的正则表达式匹配。基本上,我需要列出所有具有与列表中任何正则表达式匹配的值的文档,而不管它们存在于哪个字段中。将x.k上的$match更改为x.v,您就有了解决方案我想在Mongo Java.AggregateIterable output=collection.aggregate(Arrays.asList(新文档($project),新文档($x),新文档($objectToArray,“$$CURRENT”)),新文档($unwind,“$x”),新文档($match),新文档($x.k),新文档($in),新BasicDBObject($regex),“^(ISBN(-10)?:?)?([-0-9xX]{13}|[0-9X]{10}$”))))))”));但这不起作用。
var r = [
     { _id: 1, name: "buzz", addr: "here"}
     ,{ _id: 2, searchword: "win", value: 6}
     ,{ _id: 3, game:0, word: "foo", fruit: "apple", fame: 7}
     ,{ _id: 4, qval:23}  
     ];
db.foo.insert(r);

var rin = [ /ame/, /^val/ ];  // list of regex

db.foo.aggregate([
  {$project: {x: {$objectToArray: "$$CURRENT"}}}
  ,{$unwind: "$x"}
  ,{$match: {"x.k": {$in: rin}}}
                ]);

{ "_id" : 1, "x" : { "k" : "name", "v" : "buzz" } }
{ "_id" : 2, "x" : { "k" : "value", "v" : 6 } }
{ "_id" : 3, "x" : { "k" : "game", "v" : 0 } }
{ "_id" : 3, "x" : { "k" : "fame", "v" : 7 } }