2016-10-17 8 views
1

スキーマフィールド(価格)は配列ですが、通常は価格は1つですが、配列の2番目のアイテムとして販売価格が表示されることがあります。データベースアレイ内のアイテムの値に基づいてマングースを選択する

私はこのフィールドを照会して、すべての商品を最低から最高まで並べ替えることができるようにしたいと思います(私がそれをしている間は範囲で選択するために$ gtと$ ltを使います)。

しかし私の挑戦は、私の配列の2番目の値であるセール価格を扱っています。私は、実際に販売価格がある場合、この価格ではなく、第1価格で並べ替えることができる必要があります。私は私のマングースクエリで{[1]使用価格}(価格は[1])場合」と言うのか分からない。

UPDATE

を私が使用したいほとんどものを得ることができますよ
私が問題にしているのは、price.1が最初に偽である部分($と区切られている部分)です。 price.1という結果を得る結果しか得られません。最初に、その価格であること1が真である、私はの商品を持っていない反対の商品を手に入れます。価格1.

mongooseはクエリの2番目の部分だけを読んでいますか?

Product.find({ $and: 
    [{"price.1": {$exists : false }}, 
    {"price.0": {$gte : req.body.lower_price}}, 
    {"price.0": {$lte : req.body.higher_price} }], 
    $and : [{"price.1": {$exists: true}}, 
    {"price.1": {$gte : req.body.lower_price}}, 
    {"price.1": {$lte : req.body.higher_price} }]}) 
.exec(function(err, products){ 
    if(err){ 
     console.log(err) 
    } 
    else{ 
     res.send(products) 
    } 
}); 
+0

あなたはすなわち、いくつかのサンプル文書のための上記の問題のためのテストケースを提供することができ、特定のクエリのためのあなたの予想される出力は何ですか? – chridam

答えて

1
Model.find({$or :[{"price.1": {$exists: false}}, {"price.1": {$gt : 10}}]}) //get all documents where either second element of the price array doesn't exist OR if it does it's greater than 10 
    .sort("price.1") // asc. Docs without second element will come first. Use -price for desc 
    .exec(function(err, res){ 
     if(err){ 
      console.log(err) 
     } 
     else{ 
      console.log(res) 
     } 
    }); 
関連する問題