在nodejs

时间:2017-11-10 10:58:18

标签: node.js mongodb mongoose

我写的代码从url获取id然后给我输出。 api?category = 4556这里4556是id。 我有一个产品控制器

  • PRODUCT_NAME
  • category_id:我从生成的类别手动传递类别ID。

并且在类别控制器中我有category_name。

在这里,我希望以这种方式 API?类别=游戏 有没有办法这样做。

exports.getProducts = function(req, res) {
  // Use the Prod model to find all products
 /* 
  Prod.find(function(err, prods) {
    if (err)
      res.send(err);
    res.json(prods);
    next();
  });
*/

  var cat=req.query.category;
  var condition = {};

  if (cat) {
    condition.cat_id = cat;
  }

  Prod.find(condition).then(function(cat) {
    res.json({cat});
  })
  .catch((err) => {
    console.log('error', err);
    res.status(500).send();
  });
};

此代码检查具有类似于url提供的id的cat_id的产品为?category = 4556 我想把它检查为?category = games, 如果有某种方式请帮助它会很高兴。提前谢谢

3 个答案:

答案 0 :(得分:1)

我找到了一个答案,这确实可以使用populate



var cat=req.query.category;
  var condition = {};

  if (cat) {
    condition.cat_id = cat;
  }

  Prod.find(condition).populate('cat_id').then(function(cat) {
    res.json({cat});
  })
  .catch((err) => {
    console.log('error', err);
    res.status(500).send();
  });
};




并在Schema中做了一点改变



var ProductSchema=new mongoose.Schema({
    name:String,
    category:String,
    price:Number,
    cat_id:{
        type : mongoose.Schema.Types.ObjectId,
        ref : 'Cat'
    }
});

// Export the Mongoose model
module.exports=mongoose.model('Prod',ProductSchema);




答案 1 :(得分:0)

您必须首先从查询中提供的名称中检索类别ID。

如果未找到具有提供名称的类别,您可能希望返回空产品数据集。我还假设类别名称是唯一的。

示例:

exports.getProducts = function(req, res) {
  var categoryName = req.query.category;

  var condition = {};
  if (categoryName) {
    condition.name = categoryName;
  }

  Category.find(condition).then(function(categories) {
    if(categories.length === 0) return {}
    return Product.find({ category_id: categories[0].id })
  }).then(function(products) {
    res.json(products);
  }).catch((err) => {
    console.log('error', err);
    res.status(500).send();
  });
};

答案 2 :(得分:0)

如果您想查找与您的类别名称相对应而不是您的ID,那么您只需要进行一次更改。从请求查询中获取类别名称(因为您目前从请求查询中获取ID)。休息你的代码会一样。

我认为您的类别名称也是唯一的。

exports.getProducts = function(req, res) {
// Use the Prod model to find all products
/* 
Prod.find(function(err, prods) {
  if (err)
   res.send(err);
  res.json(prods);
  next();
});
*/

var cat=req.query.categoryName;
var condition = {};

if (cat) {
 condition.cat_Name = cat;
}

Prod.find(condition).then(function(cat) {
 res.json({cat});
})
.catch((err) => {
 console.log('error', err);
 res.status(500).send();
});
};

希望它对你有用。 感谢。