Wpis z mikrobloga

Mirki, jest sobie baza ze schematem, który w dużym uproszczeniu wygląda tak:

ASchema({ name: String }) // model A
BSchema({ x: String, y: [{ type: Schema.Types.ObjectId, ref: 'A' }] }) // model B

Teraz potrzebuję pobrać wszystkie obiekty B, które pod tablicą y zawierają obiekty A z konkretną wartością pola name. Wychodzi na to, że musiałbym wykonać najpierw .populate('y'), a dopiero potem przeszukać kolekcję pod potrzebnym mi kątem. Jak to ugryźć bez zaciągania całego zbioru i filtrowania go "normalnym" JSem?
#mongodb #mongoose #nodejs #javascript #programowanie
  • 5
@Tojtek: tl;dr Nie da się tego zrobić bez filtrowania.


ModelB.find()
.populate({
path: 'y',
match: { name: 'Tojtek' }
})
.exec()
.then(users => {
users = users.filter(doc => {
return doc.y !== null;
});
console.log(users);
})
.catch(err => {
console.log(err);
});