Mam items
kolekcję takiego:MongoDB - kruszywo i złączyć wyniki do grupy
[
{ name: 'item1', description: 'description #1', categories: 'cat_A; cat_B'},
{ name: 'item2', description: 'description #2', categories: 'cat_B'},
{ name: 'item3', description: 'description #3', categories: 'cat_C; cat_B'},
{ name: 'item4', description: 'description #4', categories: 'cat_B; cat_A'},
{ name: 'item5', description: 'description #5', categories: 'cat_B'},
{ name: 'item6', description: 'description #6', categories: 'cat_D'}
]
Chcę znaleźć i Wyszukane według kategorii. Stworzyłem zapytanie Mongo:
db.getCollection('items')
.aggregate([
{
$match: {
categories: {$in: [/cat_a/i, /cat_b/i]}
}
}, {
$group: {
_id: "$categories",
items: { $push: { name: "$name", description: '$description' } }
}
}
])
Więc to mi zwraca to:
result : [
{
"_id" : "cat_B; cat_C",
"items" : [
{
"name" : "item3",
"description" : "description #3"
}
]
}, {
"_id" : "cat_B; cat_A",
"items" : [
{
"name" : "item4",
"description" : "description #4"
}
]
}, {
"_id" : "cat_B",
"items" : [
{
"name" : "item2",
"description" : "description #2"
},
{
"name" : "item5",
"description" : "description #5"
}
]
}, {
"_id" : "cat_A; cat_B",
"items" : [
{
"name" : "item1",
"description" : "description #1"
}
]
}
]
Co chcę osiągnąć jest:
result : [
{
"_id" : "cat_A",
"items" : [
{
"name" : "item1",
"description" : "description #1"
},
{
"name" : "item4",
"description" : "description #4"
}
]
}, {
"_id" : "cat_B",
"items" : [
{
"name" : "item1",
"description" : "description #1"
},
{
"name" : "item2",
"description" : "description #2"
},
{
"name" : "item3",
"description" : "description #3"
},
{
"name" : "item4",
"description" : "description #4"
},
{
"name" : "item5",
"description" : "description #5"
}
]
}
]
Czy jest to możliwe w czystej zapytania Mongo?
możemy użyć 'split (";")' i 'trim' dla małego czyszczenia. – profesor79
Niestety, nie mogę zmodyfikować żadnego pola w tej kolekcji i muszę zachować 'categories' jako ciąg znaków. – zucker
Następnie utwórz dodatkowe pole, które przechowuje odrębny zestaw kategorii i możesz zachować oryginalne kategorie w niezmienionym stanie. Po uruchomieniu potoku agregacji można wtedy "$ unwind" i grupować według nowego pola. – chridam