2012-07-30 185 views
0

不知道这是否可以完成,所以想我会问。Mongodb和排序子阵列

我有以下的MongoDB/s的

{ 
"store":"abc", 
"offers":[{ 
    "spend":"100.00", 
    "cashback":"10.00", 
    "percentage":"0.10" 
    },{ 
    "spend":"50.00", 
    "cashback":"5.00", 
    "percentage":"0.10" 
    }] 
} 

{ 
    "store":def", 
    "offers":[{ 
     "spend":"50.00", 
     "cashback":"2.50", 
     "percentage":"0.05" 
     },{ 
     "spend":"20.00", 
     "cashback":"1.00", 
     "percentage":"0.05" 
     }] 
    } 

{ 
     "store":ghi", 
     "offers":[{ 
      "spend":"50.00", 
      "cashback":"5.00", 
      "percentage":"0.10" 
      },{ 
      "spend":"20.00", 
      "cashback":"2.00", 
      "percentage":"0.10" 
      }] 
     } 

那种需要由百分比。

我不确定我是否必须使用另一个PHP函数的usort来完成它,或者如果Mongodb足够聪明才能做我想做的事情。

回答

1

令人惊讶的是,是的,MongoDB的可以这样做:

// Sort ascending, by minimum percentage value in the docs' offers array. 
db.collection.find({}).sort({ 'offers.percentage': 1 }); 

// Sort descending, by maximum percentage value in the docs' offers array. 
db.collection.find({}).sort({ 'offers.percentage': -1 }); 
+0

可以对文档进行排序,但不知道这对文档中的数组有什么帮助,或者Mongo如何处理未排序的数组。例如,可预测地排序%s为0.05的文档,0.10与另一个0.10,0.05的文档进行排序。 – Stennie 2012-07-31 03:55:24

+0

如果每个优惠都在自己的收藏行中,会更好吗? – RussellHarrower 2012-07-31 05:09:35

1

鉴于文件内的数组的数据结构,我不认为这是有道理做这样MongoDB中 - 蒙戈将返回整个文件(不是数组)。

如果您尝试比较优惠,则可能更有意义的是拥有单独的集合而不是嵌入的数组。例如,您可以找到匹配按照支出或百分比折扣排序的至少$ 5的现金返还的商品。

如果您只是想要在单个文档中订购优惠,您可以在PHP中使用usort()