所有
我是MongoDB的新手,我想知道我是否搜索字段,如何根据结果获得值范围:
我想问的主要有两件事:
例如:
如果我搜索{"product_name": "pname1"}
,并且我得到了几个结果,那么我想知道名称为"pname1"
的那些产品的价格范围(假设每个文档都有一个名为价格的字段)。
例如:
如果我搜索{"price": {$gt: 100}}
,我得到了几个结果,那么我想知道价格大于100的那些产品的价格范围
由于
答案 0 :(得分:2)
第一部分
对于第一个查询,您可以使用MongoDB的aggregation framework
,特别是$first
和$last
操作。特别是,您可以通过以下方式查询您的收藏集以获取所有产品的价格范围:
db.yourCollection.aggregate([
{$sort:
{
"product_name": 1,
"price": 1
}
},
{
$group:
{
_id: "$product_name",
min_price: {$first: "$price"},
max_price: {$last: "$price"},
}
}
])
因此,如果您需要特定产品的信息,只需在汇总管道中添加$match
阶段:
{
$match: {"product_name": "<the product of interest>"}
}
第二部分
第二个查询的类似内容。
db.yourCollection.aggregate([
{
$match: {
"price": {$gt: 100}
}
},
{
$group: {
_id: "$price",
products: {$push: "$product_name"}
}
},
{
$sort: {_id: 1}
}
{
$group: {
_id: null,
min_price_products: {$first: "$products"},
mix_price: {$first: "$_id"},
max_price_products: {$last: "$products"},
max_price: {$last: "$_id"}
}
}
])
答案 1 :(得分:1)
mongodb中存在聚合框架,其可以提供可以将两个或更多个操作组合在一起的功能。
它为我们提供了使用$ match和$ group运算符满足特定查询的特定字段的最大值和最小值。它可以用来找到范围。
对于给定的用例,查询类似于:
db.collection.aggregate([{$match: {"product_name":"pname1"}}, {$group :{_id:null , maxValue:{$max:"$price"}, minValue:{$min:"$price"}}}]);
此处查询存在于$ match中,而max和min值存在于$ group聚合功能中。
详细说明可在以下链接中找到: http://docs.mongodb.org/manual/reference/operator/aggregation/match/ http://docs.mongodb.org/manual/reference/operator/aggregation/group/