Pergunta

Eu tenho uma coleção de artigos em MongoDB que possui a seguinte estrutura:

{
    'category': 'Legislature', 
    'updated': datetime.datetime(2010, 3, 19, 15, 32, 22, 107000), 
    'byline': None, 
    'tags': {
        'party': ['Peter Hoekstra', 'Virg Bernero', 'Alma Smith', 'Mike Bouchard', 'Tom George', 'Rick Snyder'], 
        'geography': ['Michigan', 'United States', 'North America']
    }, 
    'headline': '2 Mich. gubernatorial candidates speak to students', 
    'text': [
        'BEVERLY HILLS, Mich. (AP) \u2014 Two Democratic and Republican gubernatorial candidates found common ground while speaking to private school students in suburban Detroit', 
        "Democratic House Speaker state Rep. Andy Dillon and Republican U.S. Rep. Pete Hoekstra said Friday a more business-friendly government can help reduce Michigan's nation-leading unemployment rate.", 
        "The candidates were invited to Detroit Country Day Upper School in Beverly Hills to offer ideas for Michigan's future.", 
        'Besides Dillon, the Democratic field includes Lansing Mayor Virg Bernero and state Rep. Alma Wheeler Smith. Other Republicans running are Oakland County Sheriff Mike Bouchard, Attorney General Mike Cox, state Sen. Tom George and Ann Arbor business leader Rick Snyder.', 
        'Former Republican U.S. Rep. Joe Schwarz is considering running as an independent.'
    ], 
    'dateline': 'BEVERLY HILLS, Mich.', 
    'published': datetime.datetime(2010, 3, 19, 8, 0, 31), 
    'keywords': "Governor's Race", 
    '_id': ObjectId('4ba39721e0e16cb25fadbb40'), 
    'article_id': 'urn:publicid:ap.org:0611e36fb084458aa620c0187999db7e', 
    'slug': "BC-MI--Governor's Race,2nd Ld-Writethr"
}

Se eu quisesse escrever uma consulta que procurava todos os artigos que tinham pelo menos 1 tag geográfica, como eu faria isso? Eu tentei escrever db.articles.find ({'tags': 'geography'}), mas isso não parece funcionar. Também pensei em mudar o parâmetro de pesquisa para 'tags.geography', mas estou tendo um diabo descobrindo qual seria o predicado de pesquisa.

Foi útil?

Solução

Se o campo "Geografia" não existir quando não houver tags (ou seja, é criado quando você adiciona um local), você pode fazer:

db.articles.find({tags.geography : {$exists : true}})

Se existe e estiver vazio (ou seja, "geography" : []) você deve adicionar um geography_size campo ou algo assim e fazer:

db.articles.find({tags.geography_size : {$gte : 1}})

Há mais informações sobre consultas em http://www.mongodb.org/display/docs/advanced+queries

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top