Mongodb - 子文档的键的正则表达式匹配

时间:2011-09-02 01:31:26

标签: regex mongodb lookup

我将一些文档保存在一个集合(名为urls)中,如下所示:

{
    payload:{
        url_google.com:{
            url:'google.com',
            text:'search'
        }
    }
},
{
    payload:{
        url_t.co:{
            url:'t.co',
            text:'url shortener'
        }
    }
},
{
    payload:{
        url_facebook.com:{
            url:'facebook.com',
            text:'social network'
        }
    }
}

使用mongo CLI,是否可以查找匹配payload的{​​{1}}子文档?并且,如果可能的话,是否也可以查询匹配的子文档(例如,确保/^url_/存在)?

我在想这样的事情:

text

但那是0结果。

任何帮助或建议都会很棒。

谢谢,

马特

2 个答案:

答案 0 :(得分:6)

无法以这种方式查询文档密钥。您可以使用$exists搜索完全匹配,但找不到与模式匹配的键名。

我假设(可能不正确)您正在尝试查找具有URL子文档的文档,并且并非所有文档都具有此文档?为什么不把这种类型的信息推到一个层面,比如:

{
  payload: {
    type: "url",
    url: "Facebook.com",
    ...
  }
}

然后你可以查询:

db.foo.find({"payload.type": "url", ...})

如果我没有注意到你不应该使用点(.)是MongoDB中的关键名称,那么我也会失职。在某些情况下,可以创建这样的文档,但是当你试图查询嵌入文档时会引起很大的混淆(Mongo使用dot作为“路径分隔符”)。

答案 1 :(得分:0)

您可以执行此操作,但需要使用aggregation:聚合是将每个阶段应用于每个文档的管道。您有很多阶段可以执行各种任务。

我为此特定问题写了一条汇总管道。如果您不需要计数,但需要文档本身,则可以在<div tabindex="0" aria-labelledby="xyz123"> <label id="xyz123"> There were errors processing the question </label> </div> 阶段进行查看。

$replaceRoot