Filip Blaauw
Filip Blaauw

Reputation: 761

Check if mongo document field exists

I want to check if the field "imageUrl" are inserted from a form into a MongoDb collection.

If it has a value, I want to return the URL, else return false. I'm not used to Mongo, and wonder how I can achieve this. Not every entry have a imageUrl field, but some do. So I need to check if it even exists for every document.

Here's my helper, where I want to have the logic:

Template.CatchesList.helpers({
  catches: function () {
    return Catches.find({}, {sort: {date: -1}});
  },

  image: function() {
    if (this.imageURL) // Need proper logic here
      return true;
    else
      return false;
  }
});

And in my template:

{{#if image}}
    <td><img width="100" src="{{imageUrl}}"></td>
{{/if}}

Upvotes: 3

Views: 3820

Answers (2)

Andrew Stover
Andrew Stover

Reputation: 301

I did this in an app and it worked for me:

    Courses.find({owned_by_contract:user_contract._id}).forEach(function(doc){
        var foo = ("your_field_name" in doc) ? doc.course_objective_english.value:"N/A";
    }):

Upvotes: 1

Blakes Seven
Blakes Seven

Reputation: 50406

MongoDB has the $exists operator to filter results where the property does not exist in the document. So you can change your query to:

return Catches.find({ "imageUrl": { "$exists": true }}, { "sort": { "date": -1 }});

And then only items that have the property will be returned.

If you are only talking about templates, then a simple conditional test on the field returns logically where it is present or not present:

{{#each catches}}
    {{> catch }}
{{/each}}

Then:

<template name="catch">
    <tr>
        <!-- other fields -->
        <td>{{#if imageUrl}}<img width="100" src="{{imageUrl}}">{{/if}}</td>
    </tr>
</template>

Where only the logic contained within {{#if}}{{/if}} will actually render.

Upvotes: 4

Related Questions