Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.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上的密钥_Mongodb - Fatal编程技术网

通过“选择”;第二级“;mongodb上的密钥

通过“选择”;第二级“;mongodb上的密钥,mongodb,Mongodb,假设我在mongodb中有这样一个结构: { 'source1': { 'name':'john', 'phone':'5555555' } 'source2': { 'name':'john', 'city':'new york' } 'source3': { 'nam

假设我在mongodb中有这样一个结构:

{
  '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]),所以我认为可以进行类似于我之前在本例中所说的搜索。我想不是这样的。谢谢