Mongo Db, как запросить, где в параметре находится объект - PullRequest
0 голосов
/ 25 октября 2019

Mongo Db, как запросить, где в параметрах есть объект с массивами. Я хотел вернуть результат, основываясь на примере параметра запроса ниже. Где год в массиве также включает модель, пробег и т. Д. Как мы это сделаем в монго? Я хотел вернуть данные в соответствии с фильтрами ниже.

Код

  exports.list = function (req, res) {
      let request = req.query.filters || req.query
      let pageNo = parseInt(req.query.page || 1)
      let size = parseInt(req.query.pageSize || 10)
      let query_pagination = {}
      let query = {}
      query_pagination.skip = size * (pageNo - 1)
      query_pagination.limit = size
      query.Year = { $in: request.year }
      query.Model = { $in: request.model }
      query.Mileage = { $in: request.mileage }
      query.PriceRange = { $in: request.priceRange }
      query.BodyStyle = { $in: request.bodyStyle }

      console.log("query", query) 

      Vehicle.model.find().exec(function(err, vehicle) {
          if(err || !vehicle) {
              res.json({
                  message: err
              })
          }

          return res.status(200).send({
             message: "success",
                 data: vehicle
             })
          })
      }
  }

Параметр запроса

{
                    Year: ['2017'],
                        Model: ['Edge', 'Eco Sports', 'Escape'],
                            Mileage: ['1-1000'],
                                PriceRange: ['$10,000-$20,000'],
                                    BodyStyle: ['Convertible', '2dr Car', '4dr Car']
                }

Пример данных

[
        {
            "_id": "5dafe73296876045c01ca797",
            "DriveType": "RWD",
            "FuelType": "Gasoline Fuel",
            "ImageList": "",
            "Options": "Rear Wheel Drive,Locking/Limited Slip Differential,Tow Hitch,Tires - Front All-Season,Tires - Rear All-Season,Conventional Spare Tire,Aluminum Wheels,Power Steering,4-Wheel Disc Brakes,ABS,Luggage Rack,Running Boards/Side Steps,Fog Lamps,Automatic Headlights,Heated Mirrors,Power Mirror(s),Privacy Glass,Intermittent Wipers,Variable Speed Intermittent Wipers,Power Driver Seat,Cloth Seats,Split Bench Seat,Driver Adjustable Lumbar,Passenger Adjustable Lumbar,Pass-Through Rear Seat,Rear Bench Seat,3rd Row Seat,Floor Mats,Adjustable Steering Wheel,Adjustable Pedals,Power Windows,Power Door Locks,Keyless Entry,Cruise Control,Engine Immobilizer,A/C,Rear A/C,Rear Defrost,AM/FM Stereo,Cassette,CD Player,Power Outlet,Auto-Dimming Rearview Mirror,Front Reading Lamps,Driver Vanity Mirror,Passenger Vanity Mirror,Driver Illuminated Vanity Mirror,Passenger Illuminated Visor Mirror,Driver Air Bag,Passenger Air Bag,Child Safety Locks",
            "Description": "",
            "DateInStock": "8/13/2019",
            "Invoice": 3500,
            "BookValue": "4566",
            "MSRP": null,
            "SellingPrice": 6991,
            "Miles": 135779,
            "Transmission": "Automatic",
            "EngineDisplacement": "4.6L",
            "EngineCylinders": "8",
            "InteriorColor": "",
            "ExteriorColor": "Gray",
            "Doors": 4,
            "ModelNumber": "U15",
            "Trim": "Xlt Popular",
            "Body": "Sport Utility",
            "Model": "Edge",
            "Make": "Ford",
            "Year": 2003,
            "VIN": "1FMRU15W83LA54322",
            "Stock": "P10100",
            "Type": "Used",
            "__v": 0,
            "CategorizedOptions": "",
            "Comment": "",
            "FileData": "",
            "name": "",
            "publishedDate": "2019-10-23T16:00:00.000Z",
            "content": {
                "brief": "",
                "extended": ""
            },
            "state": "published",
            "Certified": true
        },
        {
            "_id": "5dafe73296876045c01ca796",
            "DriveType": "RWD",
            "FuelType": "Gasoline Fuel",
            "ImageList": "",
            "Options": "SOUND SYSTEM FEATURE  XM SATELLITE RADIO.  features 67 channels of 100% commercial-free music included in its over 150 channels of the best in music  news  sports  talk  comedy  XM Instant Traffic and Weather  and more.  Digital quality sound with coast-to-coast signal coverage.  Three trial months-no obligation. (Includes body-color external antenna.  Subscription fees apply.  Available only in the 48 contiguous U.S.),HIGHWEAR NUANCE LEATHER SEAT TRIM  (STD),ENGINE  6.0L LS2 V8 SFI  (400 HP [298.3 kW] @ 6000 rpm  400 lb.-ft. [542.8 N-m] @ 4400 rpm) (STD),TRANSMISSION  4-SPEED AUTOMATIC  ELECTRONICALLY CONTROLLED WITH OVERDRIVE  (Includes (GU2) Axle  2.73 ratio),SEATS  FRONT SPORT BUCKET WITH PERFORATED LEATHER SEATING SURFACES  includes back angle adjustment  adjustable lumbar and side bolsters (Includes (AJ7) Air bags  frontal and side-impact  driver and front passenger.) (STD),HOMELINK TRANSMITTER  includes garage door opener  3-channel programmable  located on driver visor,SOUND SYSTEM  ETR AM/FM STEREO WITH 6-DISC  IN DASH CD CHANGER  MP3 PLAYBACK AND (U65) SOUND SYSTEM FEATURE  BOSE PREMIUM 7-SPEAKER SYSTEM  includes Radio Data System  seek-and-scan  digital clock  auto-tone control  automatic volume and TheftLock,LICENSE PLATE BRACKET  FRONT,WHEELS  POLISHED  5-SPOKE ALUMINUM  18 x 8.5 (45.7 CM x 21.6 CM)  FRONT AND 19 x 10.0 (48.3 CM x 25.4 CM)  REAR,HEAD-UP DISPLAY  includes dot-matrix readouts for street mode  track mode with g-meter  vehicle speed  engine rpm  and readings from key gauges including water temperature and oil pressure,PREFERRED EQUIPMENT GROUP  includes (UV6) Head-Up Display  (UG1) Homelink transmitter  (AAB) Memory Package  (DD0) Mirrors  inside rearview with compass and driver outside rearview  auto-dimming  (KA1) Seats  heated  driver and passenger  (US9) Sound system  ETR AM/FM stereo with 6-disc  in dash CD changer  MP3 playback  (N37) Steering column  power telescopic  includes manual tilt,AXLE  3.15 PERFORMANCE RATIO,MEMORY PACKAGE  2 driver settings  remembers presets for 6-way power seat  outside mirrors  climate control  radio presets and telescoping steering column,Locking/Limited Slip Differential,Rear Wheel Drive,Traction Control,Stability Control,Tires - Front Performance,Tires - Rear Performance,Aluminum Wheels,Power Steering,ABS,4-Wheel Disc Brakes,Rear Defrost,Convertible Soft Top,HID headlights,Automatic Headlights,Fog Lamps,Daytime Running Lights,Heated Mirrors,Power Mirror(s),Intermittent Wipers,Driver Air Bag,Passenger Air Bag,Front Side Air Bag,Leather Seats,Bucket Seats,Driver Adjustable Lumbar,Passenger Adjustable Lumbar,Power Driver Seat,Power Passenger Seat,Power Outlet,Floor Mats,Adjustable Steering Wheel,Leather Steering Wheel,Tire Pressure Monitor,Power Door Locks,Power Windows,Cruise Control,Security System,Engine Immobilizer,Keyless Start,Keyless Entry,Remote Trunk Release,Climate Control,Multi-Zone A/C,AM/FM Stereo,CD Player,MP3 Player,Front Reading Lamps,Driver Vanity Mirror,Passenger Vanity Mirror,Driver Illuminated Vanity Mirror,Passenger Illuminated Visor Mirror,Passenger Air Bag On/Off Switch",
            "Description": "",
            "DateInStock": "08/08/2019",
            "Invoice": 18000,
            "BookValue": "19556",
            "MSRP": 0,
            "SellingPrice": 22997,
            "Miles": 22116,
            "Transmission": "Automatic",
            "EngineDisplacement": "6.0L",
            "EngineCylinders": "8",
            "InteriorColor": "Cashmere",
            "ExteriorColor": "Victory Red",
            "Doors": 2,
            "ModelNumber": "1YY67",
            "Trim": "Base",
            "Body": "Convertible",
            "Model": "Corvette",
            "Make": "Chevrolet",
            "Year": 2005,
            "VIN": "1G1YY34U455128500",
            "Stock": "P10092",
            "Type": "New",
            "__v": 0,
            "state": "published",
            "Certified": true
        }]

Ответы [ 2 ]

1 голос
/ 25 октября 2019
Vehicle.model.find(query, null, options)




try like this...
0 голосов
/ 25 октября 2019

Вы можете сделать это следующим образом:

Vehicle.model.find( { Year: { $all: ['2017', '2018'] } } )

Вы можете заменить все свои входные данные переменными запроса соответственно.

...