1

これができるかどうかわからないので、私は尋ねようと思いました。

私は次の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が私がやりたいことを行うのに十分賢いかどうかはわかりません。

4

2 に答える 2

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 });
于 2012-07-31T02:18:08.017 に答える
1

ドキュメント内の配列のデータ構造を考えると、MongoDB でこの並べ替えを行うのは意味がないと思います。Mongo はドキュメント全体 (配列ではない) を返します。

オファーを比較しようとしている場合は、埋め込み配列の代わりに別のコレクションを用意する方がおそらく理にかなっています。たとえば、少なくとも 5 ドルのキャッシュバックに一致するオファーを、支出またはパーセンテージ割引で並べ替えて見つけることができます。

単一のドキュメント内でオファーを並べ替えようとしているだけの場合は、PHP でusort()を使用してこれを行うことができます。

于 2012-07-31T04:01:13.247 に答える