Reputation: 364
I am using angular,nodejs,mongodb and mongoose-paginate-v2 and mongoose libraries.
I need to filter the list of rooms by availability property.
hoe.component.ts
getRooms(page = 1)
{
// console.log('error');
this.roomservice.getRooms(page).subscribe(
response =>
{
if(response.rooms)
{
this.rooms = response.rooms;
// navegacion de paginación
this.totalPages = response.totalPages;
console.log(this.totalPages);
var number_pages = [];
for(var i = 1; i <= this.totalPages; i++)
{
number_pages.push(i);
}
this.number_pages = number_pages;
if(page >=2)
{
this.prev_page = page-1;
}
else
{
this.prev_page = 1;
}
if(page < this.totalPages)
{
this.next_page = page+1;
console.log(page);
}
else
{
this.next_page = this.totalPages;
}
}
else
{
this.router.navigate(['admin/listrooms']);
console.log('error');
}
},
error =>
{
console.log(error);
}
);
}
<div class="row">
<ul class="list-group">
<li class="list-group-item" *ngFor="let room of rooms">
<div class="row">
<div class="col-sm-2">
<div class="" *ngIf="!room.image1 || room.image1 == undefined; else noimage">
<img class="img-list" src="{{ url + 'avatar/' + 'no-image.png' }}" alt="student">
</div>
<ng-template #noimage>
<img class="img-list" src="{{ url + 'avatar/' + room.image1 }}" alt="student">
</ng-template>
</div>
<div class="col-sm-10">
<p class="title-room">Title {{ room.title }}</p>
<p class="data-room"> {{ room.location }}</p>
<p class="data-room"> {{ room.description | less:[150, '...'] }}</p>
<p class="data-room"> Room type {{room.roomtype}}</p>
<p>£ {{ room.price }} pm</p>
<a [routerLink]="['/room', room._id]" class="btn btn-danger">View</a>
</div>
</div>
</li>
</ul>
</div>
<ul class="pagination">
<li class="page-item">
<a class="page-link" [routerLink]="['/admin/listrooms', prev_page]">«</a>
</li>
<li class="page-item" *ngFor="let num of number_pages">
<a class="page-link" [routerLink]="['/admin/listrooms', num]" href="">{{ num }}</a>
</li>
<li class="page-item">
<a class="page-link" [routerLink]="['/admin/listrooms', next_page]">»</a>
</li>
</ul>
nodejs
getRooms: function(req, res) {
// Recoger la pagina actual
if (!req.params.page || req.params.page == 0 || req.params.page == "0" || req.params.page == null || req.params.page == undefined) {
var page = 1;
} else {
var page = parseInt(req.params.page);
}
// Indicar las opciones de paginacion
var options = {
sort: { date: -1 },
populate: 'room',
limit: 5,
page: page,
read: {
tags: [{
availability: 'true'
}
],
}
};
// Find paginado
Room.paginate({}, options, (err, rooms) => {
if (err) {
return res.status(500).send({
status: 'error',
message: 'Error al hacer la consulta'
});
}
if (!rooms) {
return res.status(404).send({
status: 'error',
message: 'No hay libros'
});
}
// Devoler resultado (topics, total de topic, total de paginas)
return res.status(200).send({
status: 'success',
rooms: rooms.docs,
totalDocs: rooms.totalDocs,
totalPages: rooms.totalPages
});
});
},
how to filter the list of rooms with availability property = true ??? with a pipe? I saw mongoose documentation but I didnt find nothing useful.
Upvotes: 0
Views: 149
Reputation: 364
I found other solution using a custom pipe
import { Pipe, PipeTransform } from '@angular/core';
@Pipe({
name: 'filter'
})
export class FilterPipe implements PipeTransform {
transform(room: Array<any>, availability: string): Array<any> {
return room.filter(room => room.availability === 'true');
}
}
<li class="list-group-item" *ngFor="let room of rooms | filter:room.availability">
Upvotes: 0
Reputation: 721
I hope I am not missing something. As stated in https://www.npmjs.com/package/mongoose-paginate-v2
Model.paginate([query], [options], [callback])
Returns promise
Parameters
[query] {Object} - Query criteria. Documentation
[options] {Object}
[select] {Object | String} - Fields to ret
So the first parameter is query object. Put your query there {availability:true}
Room.paginate({availability:true}, options, ...
Upvotes: 1