我有一个包含大小产品的Mongodb系列,我想按特定顺序对它们进行排序。
在SQL中你会做SORT BY FIELD(大小,‘XS’,‘S’,‘M’,‘L’),但我完全不知道……
不幸的是 sort(for queries)/orderBy(for aggregations) 遵循语法:
sort(for queries)/orderBy(for aggregations)
<field1>: <sort order>;
因此,您无法复制与SQL中相同的行为。 您的解决方案可能是在过滤器中传递orderBy / sort,再次查询这些结果。
另一种解决方案是使用聚合,但您必须指定要在最终结果中使用的产品中的哪些字段:
db.products.aggregate( [ { $group : { _id : "$size", products: { $push: "$name" } } } ] )
响应将如下所示:
{“_ id”:“L”,“products”:[]} {“_ id”:“M”,“products”:[ “a”,“b”]}
另一个聚合示例,首先过滤产品然后将它们分组:
db.products.aggregate([ { $match: { size: { $in: ["M", "L"] } } }, { $group: { _id: "$size", products: { $push: {name: "$name", size:"$size"} } } } ]); // { "_id" : "M", "products" : [ { "name" : "a2", "size" : "M" } ] } // { "_id" : "L", "products" : [ { "name" : "a1", "size" : "L" }, { "name" : "a3", "size" : "L" } ] }