w moim obecnym Mongo DB, mam proste Części kolekcję, ze stosunków między rodzicami dzieci, jak następuje:Mongoose: Znajdź etykietę w tablicy i zwraca dopasowanie dokumentów
{"partcode": "Parent1","children": ["Child1","Child2","Child3"]}
{"partcode": "Child1","label": ["label1"]}
{"partcode": "Child2","label": ["label1"]}
{"partcode": "Child3","label": ["label1"]}
W celu powrotu dzieci partcode, korzystać z następujących funkcji: Mongoose
PartSchema.static('getChildren', function(query, callback) {
var self = this,
self.findOne(query, {children: 1, _id: 0})
.exec(function(err, doc) {
return (self.find({
"partcode": {
"$in": doc.children
}
}, {_id: 0}, callback));
});
});
ta zwraca następującą macierz:
[{"partcode": "Child1","label": ["label1"]},
{"partcode": "Child2","label": ["label1"]},
{"partcode": "Child3","label": ["label1"]}]
Chciałbym zaimplementować system etykiet, w którym mogę określić etykietę jako meta-dziecko, i kod, aby zwrócić wszystkie dzieci pasujące do tej etykiety.
{"partcode": "Parent1","children": ["*label1"]}
wróci:
[{"partcode": "Child1","label": ["label1"]},
{"partcode": "Child2","label": ["label1"]},
{"partcode": "Child3","label": ["label1"]}]
będę określić etykietę u dzieci w dziedzinie dokumentu nadrzędnego jako zaczynające się od znaku specjalnego (obecnie używam „*”, ale szczęśliwy, aby zmienić do czegoś innego, jeśli zajdzie taka potrzeba).
Pseudokod:
- znaleźć nadrzędna
- Get rodzic „s dzieciom tablicę
- W tablicy, jeśli dziecko rozpoczyna się etykiecie znaków
- dostać tablicę wszystkich partcodes z części pasujących etykiety i
- partcodes zastępczych na etykiecie dzieci tablicy
- obie dzieci tablica
dzieci, które nie są poprzedzone znak etykiety również powinien zostać zwrócony.
możesz używać wyrażeń regularnych w instrukcji $ in. Coś w rodzaju 'find ({label: {$ in: [/ label1 /]}}, callback)' Pamiętaj, aby dodać indeks dla pola 'label' – Andreas
Dzięki za to. Nie mam nic przeciwko szczegółowi wokół znaleziska. Stworzyłem funkcję etykiety, która zwraca wszystkie obiekty z określoną etykietą. Nie jestem pewien, jak najlepiej to zorganizować; to znaczy szerokie pociągnięcia. Przechodzę w kierunku rurociągu Aggregate. – Terry