基于数据库数组

时间:2016-10-17 17:03:59

标签: node.js mongodb mongoose

我有一个架构字段(价格),这是一个数组,通常只有1个价格,但有时将销售价格列为数组中的第二个项目。

我希望能够查询此字段并返回所有产品,从最低到最高排序(当我在其中时,使用$ gt和$ lt来按范围选择)

但我的挑战是处理销售价格,这是我阵列中的第二个价值。我需要能够按这个价格排序,而不是第一个价格,如果实际上有一个销售价格。我不知道如何在我的猫鼬查询中说出#34; if(price [1]){使用价格[1]}。

更新

我可以使用下面的查询得到几乎所需的内容 我的问题是,当我将位置放在price.1首先为假(这些部分由$和划分)时,我只得到反映产品的结果 price.1。当我把第二个放在第一个,那个价格是真的,我只得到相反的产品没有 price.1。

mongoose只阅读我查询的第二部分吗?

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)
    }
});

1 个答案:

答案 0 :(得分: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)
        }
    });