python:查询mongodb数据库以查找未知字段下的特定值

时间:2015-04-29 12:52:10

标签: python mysql mongodb

我使用python生成mongodb数据库集合,我需要从数据库中找到一些特定的值,文档如下:

{
"_id":ObjectId(215454541245),
"category":food
"venues":{"Thai Restaurant":251, "KFC":124, "Chinese Restaurant":21,.....}
}

我的问题是,我想查询这个数据库,找到价值小于200的所有场地,所以在我的例子中,"肯德基"和#34;中餐厅"将从此查询中返回。

任何人都知道该怎么做?

1 个答案:

答案 0 :(得分:1)

如果您可以更改架构,则可以更轻松地针对您的收藏集发出查询。实际上,将动态值作为键被认为是MongoDB的糟糕设计模式,因为它们极难查询。

推荐的方法是遵循这样的嵌入式模型:

{
    "_id": ObjectId("553799187174b8c402151d06"),
    "category": "food",
    "venues": [
        {
            "name": "Thai Restaurant",
            "value": 251
        },
        {
            "name": "KFC",
            "value": 124
        },
        {
            "name": "Chinese Restaurant",
            "value": 21
        }
    ]
}

因此,使用此结构,您可以发出查询以查找值小于200的所有场地:

db.collection.findOne({"venues.value": { "$lt": 200 } }, 
    {
        "venues": { "$elemMatch": { "value": { "$lt": 200 } } },
        "_id": 0 
    });

这将返回结果:

/* 0 */
{
    "venues" : [ 
        {
            "name" : "KFC",
            "value" : 124
        }
    ]
}