I'm connecting to an API and copying some of the result data into my own database to be manipulated afterward. Basically I query the API and search for "restaurants", and it brings me a list of restaurants, which I copy some relevant info, such as the unique ID of the restaurant. Let's say in this case one of the restaurants was "Bubba's Bar & Grill". So I insert this and many other restaurants into my own MongoDB database.
Then I connect to the same API and run a search for "bars" and somewhere in this list it will have "Bubba's Bar & Grill" again. Since I want to keep unique records in my own database, what I'd like to do is have a field as type Array that will contain the types of places a single record will be. So in this case the object in MongoDB will look something like this:
{
name: 'Bubba\'s Bar & Grill',
id: 'bubbas-bar-and-grill',
type: ['bar', 'restaurant']
}
I believe the best way to do this is to have some type of custom mongoose validator, or a .pre('save') function to make this happen. I'd tried several ways but unfortunately the MEAN stack is not my primary proficiency as a software developer. Anyone have any ideas for the best way to approach this issue?
Here's my code so far:
server.js
var mongoose = require('mongoose'),
api = require('myapi')
// API Credentials
var id = 'myapi-id'
var secret = 'myapi-secret'
// Connect to MongoDB
mongoose.Promise = global.Promise
mongoose.connect('mongodb://127.0.0.1/db')
.then(() => console.log('connection succesful'))
.catch((err) => console.error(err))
// Import Models
var Location = require('./model.places.js')
//Get API Token
api.call('API', 'getAccessToken', {
'appId': id,
'appSecret': secret
}).on('success', (token) => {
var access_token = token.access_token
console.log('Access token: '+ access_token)
// Populate Database with Places
api.call('API', 'getBusinesses', {
'accessToken': access_token,
'term': 'restaurant'
}).on('success', (payload) => {
for (var i = 0; i < payload.businesses.length; i++) {
var location = new Location({
name: payload.businesses[i].name,
id: payload.businesses[i].id
type: 'restaurant'
})
location.save(function (err) {
if (err) { console.log(err) }
})
}
})
})
model.places.js
var mongoose = require('mongoose')
var Place = new mongoose.Schema({
name: { type: String, required: true, trim: true },
id: { type: String, required: true, trim: true, unique: true }
type: { type: Array, default: [] }
})
module.exports = mongoose.model('places', PlaceSchema)
via robotsushi
No comments:
Post a Comment