根据 MongoDB 中的字典键过滤文档

Posted

技术标签:

【中文标题】根据 MongoDB 中的字典键过滤文档【英文标题】:Filtering documents against a dictionary key in MongoDB 【发布时间】:2011-01-30 13:21:01 【问题描述】:

我在 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"

如果我想编写一个查询来查找所有至少有 1 个地理标签的文章,我会怎么做?我试过写 db.articles.find( 'tags': 'geography' ),但这似乎不起作用。我也考虑过将搜索参数更改为“tags.geography”,但我很想弄清楚搜索谓词是什么。

【问题讨论】:

【参考方案1】:

如果“地理”字段在其中没有任何标签时不存在(即,它是在您添加位置时创建的),您可以这样做:

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 有更多关于查询的信息

【讨论】:

以上是关于根据 MongoDB 中的字典键过滤文档的主要内容,如果未能解决你的问题,请参考以下文章

如何在任意深度查找 MongoDB 字段名称

MongoDB查询在过滤数组后根据数组大小返回所有内容?

如何根据 MongoDB 中的列表计数过滤文档? [复制]

如何根据 MongoDB 中的列表计数过滤文档? [复制]

mongoDB应用篇-mongo聚合查询

如何根据MongoDB中文档字段中的每个数组项过滤集合