通过“选择”;第二级“;mongodb上的密钥
假设我在mongodb中有这样一个结构:通过“选择”;第二级“;mongodb上的密钥,mongodb,Mongodb,假设我在mongodb中有这样一个结构: { 'source1': { 'name':'john', 'phone':'5555555' } 'source2': { 'name':'john', 'city':'new york' } 'source3': { 'nam
{
'source1': {
'name':'john',
'phone':'5555555'
}
'source2': {
'name':'john',
'city':'new york'
}
'source3': {
'name':'john',
'phone':'5555555'
'city':'new york'
}
}
如何选择所有具有“电话”字段的源(source1和source3)?
类似于*.phone{$exists:true}基本上,您不能像在mongodb中所说的那样执行“*.phone”,您应该始终在您尝试执行的操作上指定字段 因此,可以在每个源中手动检查一个丑陋的解决方案:
db.sources.find( { $or : [ { "source1.phone" : { $exists : true },
{ "source2.phone" : { $exists : true },
{ "source3.phone" : { $exists : true }]} };
但是,如果重新设计模式,使其具有一个嵌套的源数组:
{
'sources': [{
'name':'john',
'phone':'5555555',
'source_name': "source1"
},
{
'name':'john',
'city':'new york',
'source_name': "source2"
}]
}
您可以更轻松地执行此操作,以下请求返回包含电话字段的所有源:
db.sources.find({ "sources.phone" : { $exists : true })
谢谢如果我只是将它声明为数组[{'name':'john',…],而没有“sources”标签,是否可以进行同样的搜索?@Lem0n:你能发布你所说的文档结构吗?它与你发布的文档结构完全相同,但从“sources”之后开始:…所以,只需要一个数组[{},{}而不是{'sources':[{},{}]}@Lem0n:如果没有标签,它将是无效的json。或者你是说一个文档对应一个源?嗯,我得到了,例如,dbs.a.insert([10]),所以我认为可以进行类似于我之前在本例中所说的搜索。我想不是这样的。谢谢