2

私はmongoコレクションを持っています:

/* 0 */
{
  "_id" : ObjectId("51f1fcc08188d3117c6da351"),
  "cust_id" : "abc123",
  "ord_date" : ISODate("2012-10-03T18:30:00Z"),
  "status" : "A",
  "price" : 25,
  "items" : [{
      "sku" : "ggg",
      "qty" : 7,
      "price" : 2.5
    }, {
      "sku" : "ppp",
      "qty" : 5,
      "price" : 2.5
    }]
}

/* 1 */
{
  "_id" : ObjectId("51fa1c318188d305fcbf9f9b"),
  "cust_id" : "abc123",
  "ord_date" : ISODate("2012-10-03T18:30:00Z"),
  "status" : "A",
  "price" : 27,
  "items" : [{
      "sku" : "ggg",
      "qty" : 7,
      "price" : 2.5
    }, {
      "sku" : "ppp",
      "qty" : 5,
      "price" : 2.5
    }]
}

昇順で並べ替えるための集計クエリを指定している場合:

 db.orders.aggregate([{
     "$unwind": "$items"
 }, {
     "$sort": {
         "price": -1
     }
 }, {
     "$match": {}
 }, {
     "$group": {
         "price": {
             "$first": "$price"
         },
         "items": {
             "$push": {
                 "sku": "$items.sku"
             }
         },
         "_id": "$_id"
     }
 }, {
     "$project": {
         "_id": 0,
         "price": 1,
         "items": 1
     }
 }])

結果が得られます:

{
    "result": [{
        "price": 25,
        "items": [{
            "sku": "ggg"
        }, {
            "sku": "ppp"
        }]
    }, {
        "price": 27,
        "items": [{
            "sku": "ggg"
        }, {
            "sku": "ppp"
        }]
    }]
}

つまり、昇順でソートされ、逆も同様です。

4

1 に答える 1

1

グループ化すると前の並べ替えが失われるため、$sort後に移動します。$group

 db.orders.aggregate([{
     "$unwind": "$items"
 }, {
     "$match": {}
 }, {
     "$group": {
         "price": {
             "$first": "$price"
         },
         "items": {
             "$push": {
                 "sku": "$items.sku"
             }
         },
         "_id": "$_id"
     }
 }, {
     "$sort": {
         "price": -1
     }
 }, {
     "$project": {
         "_id": 0,
         "price": 1,
         "items": 1
     }
 }])

operator の場合$natural、これはdocから引用されたものです。

$natural 演算子は、次の構文を使用して、ディスク上に存在する順序でドキュメントを返します

つまり、表示される順序は、DB に格納されている順序と必ずしも一致しないということです。

于 2013-08-01T17:48:34.183 に答える