PYP
PYP

Reputation: 125

NodeJS/Mongoose - How to reference individual models after concatenation?

I am concatenating two models (Blogs and Events) so I can display all records from both collections in a single forEach loop:

const blogs = await Blog.find({});
const events = await Event.find({});
const blogsAndEvents = blogs.concat(events);

blogsAndEvents.forEach(function(blogOrEvent) { etc. etc.

However, within the forEach loop, in some cases, I want to still reference the original model it comes from, e.g. 'if Blog, title equals BLOG, if Event, title equals event). I have a workaround for this where I am using a unique field from each model to determine the underlying model, like this:

if (blogOrEvent.blogPost) {
    title = "BLOG"
} elseIf (blogOrEvent.eventDate) {
    title = "EVENT"
}

This approach doesn't seem very clean to me though as it relies on their being a unique field in each model. It there a better way I can access the original underlying model within the loop? Thanks.

Upvotes: 1

Views: 35

Answers (1)

ambianBeing
ambianBeing

Reputation: 3529

With mongoose documents it can be distinctly verified which Model they belong to using instance of :

  const blogs = await Blog.find({});
  const events = await Event.find({});
  const blogsAndEvents = blogs.concat(events);

  blogsAndEvents.forEach(function (blogOrEvent) {
    if (blogOrEvent instanceof Blog) {
      title = "BLOG";
    } else if (blogOrEvent instanceof Event) {
      title = "EVENT";
    }
  });

Upvotes: 1

Related Questions