Filtering documents with a dictionary key in MongoDB

I have a collection of articles in MongoDB that has the following structure:

{
    '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 nation-leading unemployment rate.", 
        "The candidates were invited to Detroit Country Day Upper School in Beverly Hills to offer ideas for Michigan 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 Race", 
    '_id': ObjectId('4ba39721e0e16cb25fadbb40'), 
    'article_id': 'urn:publicid:ap.org:0611e36fb084458aa620c0187999db7e', 
    'slug': "BC-MI--Governor Race,2nd Ld-Writethr"
}

If I wanted to write a query that would search for all articles containing at least one geography tag, how would I do it? I tried writing db.articles.find ({'tags': 'geography'}) but this does not work. I also thought about changing the search parameter to "tags.geography", but I have a time devil figuring out what will be the search predicate.

+3
source share
1 answer

If the "geography" field does not exist when there are no tags in it (that is, it is created when adding a location), you can do:

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

(.. "geography" : []), geography_size - :

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

http://www.mongodb.org/display/DOCS/Advanced+Queries

+7

Source: https://habr.com/ru/post/1738100/


All Articles