1

SOユーザーの皆さん、こんにちは。

ドキュメントからは単純に理解できない高度なMongooseクエリに遭遇しました。

まず、数学で並べ替えたいと思います。基本的に、2 つのオブジェクトの価格差でソートできるようにしたいと考えています。基本的な数値を含む「price」と「oldprice」があります。次に、それらを差し引いて、割引率が高い順に並べ替えたいと思います。したがって、SQLでは次のようになります

ORDER BY (oldprice - price)

私が遭遇した別の問題は、文字列配列による文字列配列のフィルタリングです。

基本的に、複数のサイズを含む [size] オブジェクト (文字列配列) を持つ「パンツ」モデルがあります。ここで、複数のユーザーが選択したサイズでデータベースを検索し、選択したサイズの 1 つを含むすべてのパンツを検索できるようにしたいと考えます。

私はやってみました:

Pants.find({
  name: new RegExp(search, 'ig'),
  sizes: {
    $in: [selectedSizes]
  }
}).skip(skip).limit(limit).sort(sort).execFind(function(err, pants) {
  return res.send(pants);
});

「selectedSizes」に 1 つの値が含まれている場合は問題なく動作しますが、複数の値では失敗します。

誰かがいくつかのアイデアを持っていることを願っています;-)


パンツモデル:

var PantsSchema;
PantsSchema = new mongoose.Schema({
  supplier: {
    type: String
  },
  manufacturer: {
    type: String
  },
  web: {
    type: String
  },
  name: {
    type: String
  },
  link: {
    type: String,
    required: true,
    unique: true
  },
  image: {
    type: String
  },
  sizes: {
    type: [String]
  },
  price: {
    type: Number
  },
  oldprice: {
    type: Number
  },
  added: {
    type: Date,
    "default": Date.now
  },
  updated: {
    type: Date
  }
});
4

1 に答える 1

1

質問による並べ替えの場合、フィールドでのみ並べ替えることができるためMongo、 の値を格納するフィールドを作成する必要があります (このフィールドにインデックスを付ける必要があります)。oldPrice - price

次に、呼び出しにsort式を追加するだけです。mongoose

.sort('priceDifference', 1);  // 1 or -1 depending on ascending or descending

$or2 番目の質問では、探しているサイズごとに 1 つの式を作成する必要があります。次のようになると思います。

.find( { $or : [ { sizes : { $in: ['m'] } }, { sizes : {$in: ['l'] } } ] } )
于 2012-10-03T09:04:10.690 に答える