Sahan
Sahan

Reputation: 1467

sails.js query json objects inside table column

So this must be a strange question, I want sails.js ORM to search something like following

If this is the result for query for the following

Venue.findOne({id: 125274827508536}).exec()

returns >

{
   "id": "125274827508536",
   "attire": "Casual",
   "can_post": false,
   "category": "Restaurant/cafe",
   "category_list": [
      {
         "id": "200742186618963",
         "name": "Vegetarian & Vegan Restaurant"
      },
      {
         "id": "192108214153222",
         "name": "Breakfast & Brunch Restaurant"
      },
      {
         "id": "188296324525457",
         "name": "Sandwich Shop"
      }
   ],
   "checkins": 562,
   "cover": {
      "cover_id": 356427064393310,
      "offset_x": 0,
      "offset_y": 13,
      "source": "https://fbcdn-sphotos-c-a.akamaihd.net/hphotos-ak-xaf1/t31.0-8/s720x720/460144_356427064393310_1179113344_o.jpg",
      "id": "356427064393310"
   },
   "culinary_team": "Ramy Abu-Yousef : Owner, Chef\nDallas Jones: Chef",
   "description": "Unique Sandwiches\nDelicious Salads\nHomemade Soups (4 daily)\nFresh Fruit Smoothies\nMilkshakes\nMOUSTACHE WALL OF FAME",
   "general_manager": "Ramy Abu-Yousef & Syndey Friedemann",
   "has_added_app": false,
   "hours": {
      "mon_1_open": "08:00",
      "mon_1_close": "22:00",
      "tue_1_open": "08:00",
      "tue_1_close": "22:00",
      "wed_1_open": "08:00",
      "wed_1_close": "22:00",
      "thu_1_open": "08:00",
      "thu_1_close": "22:00",
      "fri_1_open": "08:00",
      "fri_1_close": "22:00",
      "sat_1_open": "08:00",
      "sat_1_close": "22:00",
      "sun_1_open": "08:00",
      "sun_1_close": "22:00"
   },
   "is_community_page": false,
   "is_published": true,
   "likes": 540,
   "link": "https://www.facebook.com/JohnnyBarrs",
   "location": {
      "city": "Queenstown",
      "country": "New Zealand",
      "latitude": -45.032691433795,
      "longitude": 168.66154298959,
      "street": "15 Church Street",
      "zip": "9300"
   },
   "name": "Johnny Barr's",
   "parking": {
      "lot": 1,
      "street": 1,
      "valet": 0
   },
   "payment_options": {
      "amex": 1,
      "cash_only": 0,
      "discover": 0,
      "mastercard": 1,
      "visa": 1
   },
   "phone": "+64 (0)3 409 0169",
   "price_range": "$$ (10-30)",
   "restaurant_services": {
      "delivery": 1,
      "catering": 0,
      "groups": 1,
      "kids": 1,
      "outdoor": 0,
      "reserve": 0,
      "takeout": 1,
      "waiter": 0,
      "walkins": 1
   },
   "restaurant_specialties": {
      "breakfast": 1,
      "coffee": 1,
      "dinner": 1,
      "drinks": 1,
      "lunch": 1
   },
   "talking_about_count": 2,
   "username": "JohnnyBarrs",
   "website": "www.johnnybarrs.com",
   "were_here_count": 562
}

Now what I need sails to do is the following

Venue.findOne({'restaurant_services': {'delivery': 1}).exec()

To return the same object as I have shown above,

Any thoughts please ?

Upvotes: 4

Views: 2130

Answers (1)

Meeker
Meeker

Reputation: 5979

If your adapter is mongo then you can do this out of the box

Venue.findOne({'restaurant_services.delivery': 1}).exec()

So you should consider your options if you can transform the data into another source to preform this query.

If not and your adapter is SQL based then it is more difficult and would require more information on your use case to decide on the most efficient option.

For instance if you could limit your query to a few indexed fields in a SQL database, you could then use lodash to find your records within your records.

Venue.find({/*limiting criteria to bring down the number of results*/}).exec(function(err,results){/* JSON.parse(results) then use lodash to find the final result*/})

Another option could be

Venue.find({restaurant_services: {contains: 'delivery: 1'}}).exec()

that is an out of the box idea, but one that might work.

Again depends deeply on your setup, how its indexed and out of how many venues that one would need to be found.

Upvotes: 3

Related Questions