我使用python生成mongodb数据库集合,我需要从数据库中找到一些特定的值,文档如下:
{
"_id":ObjectId(215454541245),
"category":food
"venues":{"Thai Restaurant":251, "KFC":124, "Chinese Restaurant":21,.....}
}
我的问题是,我想查询这个数据库,找到价值小于200的所有场地,所以在我的例子中,"肯德基"和#34;中餐厅"将从此查询中返回。
任何人都知道该怎么做?
答案 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
}
]
}