【问题标题】:Search data in mongodb according to field values根据字段值在mongodb中搜索数据
【发布时间】:2017-02-03 13:36:52
【问题描述】:

我正在使用 mongodb 和 node.js。在我的数据库中,我有 6 个字段是

  1. 出价
  2. 颜色(数组)
  3. 大小(数组)
  4. cat_id
  5. sub_cat_id

一切正常。现在我想在我的代码中添加过滤器。在过滤器区域中,我添加了所有字段。用户选择多种颜色和尺寸,因此它将以数组格式出现,但大多数时候用户不会选择颜色选项或尺寸选项,此时字段值为空白,因此我的过滤器不会从数据库中获取任何结果。所以如果在搜索过程中值为空,我想删除颜色或大小字段。我已经尝试过下面的代码,但它不起作用。我是如何做到的。

var catId     = new Array();
var sort      = saveFilterSort.sort;
var filter    = req.body;

if(req.body.catId){
  catId.push("category_id:"+req.body.catId);
}

if(req.body.subcatid){
  catId.push("sub_category_id:"+req.body.subcatid);
}

if(req.body.minprice){
  catId.push("price:{$gt:"+req.body.minprice+"}");
}

if(req.body.maxprice){
 catId.push("price:{$lt:"+req.body.maxprice+"}");
}

if(req.body.color){
  catId.push("color:{$in:"+req.body.color+"}");
}

if(req.body.size){
  catId.push("attribute:{$in:"+req.body.size+"}");
}

var finalCat = catId.join(',');

console.log(finalCat);
console.log(catId);


if((filter) && (sort)){ 
    Product.find(
    {
      brand_id:bid, finalCat
    },
    function(error,fetchallFeatProds)
    {
      console.log('#######################');
      console.log(fetchallFeatProds);
      console.log('#######################');
      callback(error,fetchallFeatProds);

    }).sort( {_id:-1,price:-1} );

此代码不起作用。请帮我。

【问题讨论】:

  • 什么是错误?
  • finalCat 只是一个字符串,它肯定不能用作查询,因为它需要一个对象
  • @WasiqMuhammad 像字符串一样对待。见下文
  • @chridam 我同意你的看法,先生,请查看以下内容', '属性:{$in:57bd9b0feb288f99247b23c7,57bd9baaeb288f28067b23c7}' ]

标签: arrays node.js mongodb search filter


【解决方案1】:

Mongoose 找到原型句柄 json 而不是字符串

var query     = {brand_id:bid};
var sort      = saveFilterSort.sort;
var filter    = req.body;

if(req.body.catId){
  query.category_id = req.body.catId;
}

if(req.body.subcatid){
  query.sub_category_id = req.body.subcatid;
}

if(req.body.minprice){
 query.price = {$gt:req.body.minprice};
}

if(req.body.maxprice){
  query.price = {$lt:req.body.maxprice};
}

if(req.body.color){
 query.color = {$in:req.body.color};
}

if(req.body.size){
  query.attribute = {$in:req.body.size};
}


if((filter) && (sort)){ 
  Product.find(query, ...

【讨论】:

  • 仍然它给定的空白值见下文 (a) 是我的请求 (b) 在我的数据库值中
  • (a) : { brand_id: 57bd5cffcebed2a3189cedd0, category_id: '57ceb9c3714ba35d22c0f814', sub_category_id: '57ceb9cf714ba35d22c0f815', price: { '$gt': {'in':' }, ['57bd9b0feb288f99247b23c7', '57bd9baaeb288f28067b23c7'] } } ###################### [] ############## #########
  • (b) { "brand_id": "57bd5cffcebed2a3189cedd0", "sub_category_id": "57ceb9cf714ba35d22c0f815", "category_id": "57ceb9c3714ba35d22c0f814", "description": "新夹克", "ku"新夹克 “ ”姓名“: ”新夹克“, ”_id“:的ObjectId( ”57ceba4a714ba35d22c0f818“), ”属性“ ▼:[ ”57bd9b06eb288f27067b23c6“, ”57bd9b0feb288f99247b23c7“, ”57bd9b22eb288f19257b23c6“, ”57bd9b50eb288f9a247b23c7“],” 颜色": [ "57c562ce3c904bdb14114314", "57ceb5f7714ba35d22c0f7f9", "57ceb609714ba35d22c0f7fa" ], }
  • 你有那些过滤器对应的数据吗?如果你直接在 mongo 中输入这个请求会发生什么?
  • 如果我直接在数据库中点击它给我值
猜你喜欢
  • 2015-12-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-04
  • 2016-08-03
  • 2016-05-22
相关资源
最近更新 更多