2012-07-30 138 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()