如何在MongoDB中获取结果值范围

时间:2015-05-20 20:57:56

标签: mongodb

所有

我是MongoDB的新手,我想知道我是否搜索字段,如何根据结果获得值范围:

我想问的主要有两件事:

  • 如何根据之前搜索的结果(如子查询)找到某个字段的范围?

例如:

如果我搜索{"product_name": "pname1"},并且我得到了几个结果,那么我想知道名称为"pname1"的那些产品的价格范围(假设每个文档都有一个名为价格的字段)。

  • 使用范围搜索时,如何直接从某个字段获取范围?

例如:

如果我搜索{"price": {$gt: 100}},我得到了几个结果,那么我想知道价格大于100的那些产品的价格范围

由于

2 个答案:

答案 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/