【问题标题】:Mongo Dynamic Search Keys And Value QueryMongo 动态搜索键值查询
【发布时间】:2019-09-04 17:57:51
【问题描述】:

如何在 Mongo DB 中查询,顺便说一下我使用 Keystone JS。我想从车辆模型中过滤或获取结果,其中键和值来自例如 { 'Year' => '2019,2018', 'Make' => 'Acura,BMW' } 。它将过滤 where year = 2019 , 2018 与 Make 相同。

我当前的代码

view.on('init', function (next) {

        var q = keystone.list('Vehicle').paginate({
            page: req.query.page || 1,
            perPage: 10,
            maxPages: 10,
            filters: {
                state: 'published',

            },
        })

            .sort('-publishedDate')

        if (locals.filters.searchkeys) {

            let urlSearchParams = new URLSearchParams(locals.filters.searchkeys)


            for (var key of urlSearchParams.keys()) {

                console.log("The Key :" , key)

                //this part is where it would be dynamic
                q.where('Year').in();


            }

        }

搜索参数

{ 'Year' => '2019,2018', 'Make' => 'Acura,BMW' }

收藏

{ total: 12,
  results:
   [ { _id: 5d6893cdc02d0e3020f84c85,
       DriveType: 'FWD',
       FuelType: 'Gasoline Fuel',
       ImageList:
        '',
       Options:
        'Traction Control,Stability Control,Front Wheel Drive,Tires - Front All-Season,Tires - Rear All-Season,Aluminum Wheels,Power Steering,4-Wheel Disc Brakes,ABS,Brake Assist,Sun/Moonroof,Generic 
Sun/Moonroof,Rear Spoiler,Automatic Headlights,Fog Lamps,Heated Mirrors,Power Mirror(s),Privacy Glass,Intermittent Wipers,Variable Speed Intermittent Wipers,Leather Seats,Power Driver Seat,Bucket Seats,Heated Front Seat(s),Driver Adjustable Lumbar,Passenger Adjustable Lumbar,3rd Row Seat,Pass-Through Rear Seat,Floor Mats,Steering Wheel Audio Controls,Adjustable Steering Wheel,Engine Immobilizer,Tire Pressure Monitor,Power Windows,Power Door Locks,Universal Garage Door Opener,Keyless Entry,Cruise Control,Security System,Climate Control,A/C,Rear A/C,Rear Defrost,AM/FM Stereo,CD Changer,CD Player,Satellite Radio,Entertainment System,Power Outlet,Driver Vanity Mirror,Passenger Vanity Mirror,Driver Illuminated Vanity Mirror,Passenger Illuminated Visor Mirror,Rear Reading Lamps,Driver Air Bag,Passenger Air Bag,Front Side Air Bag,Passenger Air Bag Sensor,Front Head Air Bag,Rear Head Air Bag,Child Safety Locks',
       Description: '',
       DateInStock: '7/15/2019',
       Invoice: 3000,
       BookValue: '3686',
       MSRP: 0,
       SellingPrice: 5592,
       Miles: 162111,
       Transmission: 'Automatic',
       EngineDisplacement: '3.5L',
       EngineCylinders: '6',
       InteriorColor: '',
       ExteriorColor: 'Gray',
       Doors: 4,
       ModelNumber: 'YF2867JNW',
       Trim: 'Ex-L',
       Body: 'Convertible',
       Model: 'Pilot',
       Make: 'Honda',
       Year: 2007,
       VIN: '5FNYF28677B037628',
       Stock: 'K2501A',
       Type: 'Used',
       image_gallery: [],
       __v: 0,
       CategorizedOptions: '',
       Comment: '',
       name: '',
       publishedDate: null,
       content: [Object],
       categories: [],
       image: [Object],
       state: 'published',
       Certified: true } ],
  currentPage: 1,
  totalPages: 2,
  pages: [ 1, 2 ],
  previous: false,
  next: 2,
  first: 1,
  last: 1 }

【问题讨论】:

  • 能否请您添加输入集合示例
  • 你的意思是数据?
  • 是的,您要查询的集合(车辆集合)示例 json 数据。
  • 好吧,等一下吧
  • @sushantmehta 我已添加收藏

标签: javascript mongodb mongoose mongodb-query nodes


【解决方案1】:

假设查询是请求参数作为后端进入

let request={'Year':'2019,2018', 'Make':'Acura,BMW'}

let query={}
if(request.Year){
  let year=request.Year.split(',')         // will give array ['2019','2018']

  for(let i=0;i<year.length;i++){          //for making array of nos [2019,2018]
   year[i]=parseInt(year[i]) 
  }

  query.Year={$in:year}                       // {$in:['2019','2018']}
}
if(request.Make){
  query.Make={$in:request.Make.split(',')}     // {$in:['Acura','BMW']}
}

var Vehicle = keystone.list('Vehicle');

let q= Vehicle.model.find(query)
  .where('state', 'published')
  .populate('author')
  .sort('-publishedAt')
  .limit(5)
  .exec(function(err, posts) {
    // do something with posts
  });

【讨论】:

  • 评论不用于扩展讨论;这个对话是moved to chat
  • 我认为最好的选择是服务器端分页
猜你喜欢
  • 2016-04-05
  • 2018-08-29
  • 1970-01-01
  • 2011-09-26
  • 2012-04-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-14
  • 2020-09-15
相关资源
最近更新 更多