Фильтрация документов по ключу словаря в MongoDB

StackOverflow https://stackoverflow.com/questions/2495932

  •  21-09-2019
  •  | 
  •  

Вопрос

У меня есть коллекция статей в MongoDB, имеющая следующую структуру:

{
    '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"
}

Если бы я хотел написать запрос, который искал бы все статьи, содержащие хотя бы один тег «география», как бы я это сделал?Я пробовал писать db.articles.find({'tags':'geography'} ), но это, похоже, не работает.Я также думал об изменении параметра поиска на «tags.geography», но у меня уйма времени, чтобы выяснить, каким будет предикат поиска.

Это было полезно?

Решение

Если поле «география» не существует, когда в нем нет тегов (т. е. оно создается, когда вы добавляете местоположение), вы можете сделать:

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top