我将一些文档保存在一个集合(名为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结果。
任何帮助或建议都会很棒。
谢谢,
马特
答案 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