Ich habe einige items
Sammlung wie folgt aus:MongoDB - Aggregat und verketten Ergebnisse Gruppe
[
{ 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'}
]
Ich möchte nach Kategorien finden und Filterergebnisse. Ich habe Mongo query:
db.getCollection('items')
.aggregate([
{
$match: {
categories: {$in: [/cat_a/i, /cat_b/i]}
}
}, {
$group: {
_id: "$categories",
items: { $push: { name: "$name", description: '$description' } }
}
}
])
Also es gibt mir dies:
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"
}
]
}
]
Was will ich erreichen ist:
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"
}
]
}
]
Ist das möglich in reiner Mongo Abfrage?
wir 'split (";") verwenden könnte' und 'trim' für eine kleine Reinigung. – profesor79
Leider kann ich kein Feld in dieser Sammlung ändern und ich muss 'categories' als eine Zeichenfolge beibehalten. – zucker
Erstellen Sie dann ein zusätzliches Feld, das den eindeutigen Satz von Kategorien speichert, und Sie können das ursprüngliche Kategorienfeld unverändert lassen. Wenn Sie die Aggregationspipeline ausführen, können Sie '$ abwickeln' und nach dem neuen Feld gruppieren. – chridam