Mongo conditional find - mongodb

So I have this article page and I need to place related articles below the current article body.
There are certain attributes that I use to find similar articles but in case there isn't any, or if there is less than 2 found, I need to add just some other articles to the result.
So if a given article has a tag "Development", I need to search for 2 other articles with that tag, and if there is less than 2 that have this tag, I need to pull just some other articles.
Right now the flow is:
I make a request to get an article using query
I make request for related articles using the result of the first request.
But now I have difficulty understand how to make another request or put a condition into the second request to optimally get another article(s).
I appreciate any help

const article =await "your collection". find({tag:"Development"}).limit(2);
const x=2 - article.length
while(x>0){
var y=await "your collection". findOne();
article.push(y);
x--;
}

Related

I can not get the number of followers on a page

I'm trying to get the number of followers on a page. That is, obtain the number that appears in the portal as: "1363 people follow this"
I am trying to make the call as follows:
Dim urlSocialAnalitics As String =
String.Format ("https://graph.facebook.com/{0}/friends?summary=total_count&access_token={1}", pIdFanPage, pToken)
But it does not work. It's a problem for me.
I have also tried with this url:
urlSocialAnalitics = String.Format("graph.facebook.com/v2.6/{0}?fields=fan_count&access_token={1}", pIdFanPage, pToken)
But this gives me the number of Likes and not of Followers
I have read the documentation:
https://developers.facebook.com/docs/graph-api/reference/page/
But I do not see anything about it.
What is the correct call?

Meteor Routing and subsequent data order

I got stuck at understanding Meteor Routes and data flow.
In the beginning it was simple blog app, with 1 collection named Posts.
Now I want to store history of changes, so I've created a second collection and named it History.
On every edit in Posts I'm adding state of post (author,content, etc ...) to History including the ID of edited post.
Question is how should I configure Iron Router to make it pass the current post id to posts/:_id/history from previous state (posts/:_id/) and get entries from History with this matching ID?
To pass the id from one view to the next, you can do it via template like so:
<a href="/posts/1/history>Post History</a>
or
<a href="/posts/{{_id}}/history>Post History</a>
or programmatically like so:
Router.go('postHistory', {_id: 1});
To get the history entries, you can resolve the data in iron router during the route request as so:
this.route('postHistory', {
path: '/posts/:_id/history',
data: function() {
return History.findOne({postId: this.params._id});
}
});
Without seeing your code it is hard to tell what you have tried already. But in order to help you understand Meteor routes perhaps you could take a look at these two links:
This introduction to routes with Iron Router
This link on more advanced routes
These should help you comprehend how to make two collections work together.

RESTfull implementation and general informatino

I have been reading a lot lately, and even more experimenting with web Development. There are some things that I simply cant understand, therefore any help is appreciated.
I am not trying to get my homework done for me. I have some holes in my knowledge, that I desire to fill. Please, help me out with your views :)
REST questions:
Reading documentation this is perfectly understandable (NODE.JS / Express) example:
EXAMPLE ONE (get):
app.get('/', function(req, res) {
res.send('please select a collection, e.g., /collections/messages')
})
My explanation: When the root of the server is hit, send thie following message
EXAMPLE TWO (get):
app.get('/collections/:collectionName/:id', function(req, res) {
req.collection.findOne({name: req.collection.id(req.params.id)},
function(e, result){
if (e) return next(e)
res.send(result)
})
})
My explanation: When the url in hit, take id from the URL (that is located in params.id) and make search based on it (that is MongoDB).
EXAMPLE THREE (post):
app.post('/collections/:collectionName', function(req, res) {
req.collection.insert(req.body, {}, function(e, results){
if (e) return next(e)
res.send(results)
})
})
My explanation: When the URL is hit, take the payload(JSON in this case) that is located in req.body, and insert it as a new document.
Questions:
Are example one and two both RESTfull?
I am now totally confused with params.id. I do understand that POST is transmitted in rew.body... what is params.id? Is it containing URL variables, such as :ID?
My explanations... are they correct?
Example three is also REST, regardless of the fact that POST is used?
Example three, '/collections/:collectionName. Why is the ':collectionName' passed in URL, I could have placed it in req.body as a parameter (along with new data) and take it from there? What is the benefit of doing it?
Thank you
An API must be using HATEOAS to be RESTful. On first example, if / is the entry point of your API, the response should contain links for the available collections, not a human readable string like that. That's definitely not RESTful.
Exactly.
They're OK, except that there's nothing in the third example implying it's a JSON body. It should check for a Content-Type header sent by the client.
REST isn't dependent on HTTP. As long as you're using the HTTP methods as they were standardized, it's fine. POST is the method to use for any action that isn't standardized, so it's fine to use POST for anything, if there isn't a method specific for that. For instance, it's not correct to use POST for retrieval, but it's fine to use it for creating a new resource if you don't have the full representation.
POST means the data body is subordinated to the resource at the target URI. If collectionName were in the POST body, this would mean you were POSTing to /collections, which would make more sense to create a new collection, not a new item of a collection.

finding both "Shopping_mall" and "food" within single URL for google places API

I tried following URLs to get both "shopping_mall" and "food" within a single request.
https://maps.googleapis.com/maps/api/place/search/json?location=%#,%#&radius=1500&sensor=true&key=%#&types=shopping_mall|food
This gives me response with only "food" type of places.
But,
https://maps.googleapis.com/maps/api/place/search/json?location=%#,%#&radius=1500&sensor=true&key=%#&types=shopping_mall
Gives the result with "shopping_mall" only. Also, The same URL with "food" only give the result same as "shopping_mall|food".
Has anyone faced this issue. I have searched across but cannot find any useful answer to that.
P.S. I have gone through this link and this link , too.
If you are getting only food in the first request, and you're getting 20 results, then it is likely Google believes the most relevant results are food. You may have to do 2 requests. You can try adding keyword=shopping, but that may limit your food results.

How to get exact phrase match out of Graph API search

Looking for a way to get an exact phrase match out of the Graph API's search endpoint. For example, all activities with "dogs and cats" in them. Putting the phrase in quotes doesn't seem to work, the API will return activities containing those words, but in any order.
curl -v "https://graph.facebook.com/search?q=%22dogs%20and%20cats%22&type=post&limit=75&access_token=&since=Wed+Jan+25+20%3A59%3A30&until=Wed+Jan+25+20%3A59%3A40"
returns and activity whose text is:
"Ohhh man it's raining dogs cats lobsters crab birds and horses up here. I'm scared!"
"dogs" "cats" and "and" are all in that post, but not in order.
Yeah I faced the same problem. There's a similar question that might help Using the Facebook Graph API to search for an exact string
Facebook doesnt allow exact phrasal matching drectly, atleast not at the API level, You would have to fetch the entire data and programmically check for exact matches (too slow though).