Ho problemi con la mia funzione di aggregazione. Sto cercando di ottenere gli ordini più comuni degli utenti dal database, ma sto solo restituendo il nome e il conteggio. Ho provato a utilizzare l'operatore $project
ma non riesco a farlo restituire qualcosa di diverso da quello che c'è nell'istruzione $group
.Mongodb Cercando di ottenere i campi selezionati per restituire dall'aggregato
Ecco la mia attuale funzione di aggregazione:
OrderModel.aggregate(
{$unwind: "$products"},
{$match: { customerID: customerID }},
{$group: { _id: "$products.name", count: {$sum:1}}},
{$project: {name: "$_id", _id:0, count:1, active:1}},
{$sort: {"count" : -1}},
{$limit: 25 })
Questo solo produce un output come segue {"count":10, "name": foo"}
mentre io voglio tornare l'intero oggetto; documenti incorporati e tutto. Qualche idea su dove sto andando male?
Modifica- Aggiunto esempio documenti e risultati attesi
documento:
{
"charge": {},
"captured": true,
"refunds": [
],
"balance_transaction": "txn_104Ics4QFdqlbCVHAdV1G2Hb",
"failure_message": null,
"failure_code": null,
"amount_refunded": 0,
"customer": "cus_4IZMPAIkEdiiW0",
"invoice": null,
"dispute": null,
"statement_description": null,
"receipt_email": null
},
"total": 13.2,
"userToken": "cus_4IZMPAIkEdiiW0",
"customerID": "10152430176375255",
"_id": "53ad927ff0cb43215821c649",
"__v": 0,
"updated": 20140701082928810,
"created": 20140627154919216,
"messageReceived": false,
"ready": true,
"active": false,
"currency": "GBP",
"products": [
{
"name": "Foo",
"active": true,
"types": [
{
"variants": [
{
"name": "Bar",
"isDefault": false,
"price": 13.2
}
]
}
]
}
]
}
Esito previsto:
[
{
"name": "Foo",
"active": true,
"types": [
{
"variants": [
{
"name": "Bar",
"isDefault": false
}
]
},
{
"variants": [
{
"name": "Something else",
"isDefault": false
}
]
}
],
"quantity": 10
},
{
"name": "Another product",
"active": true,
"types": [
{
"variants": [
{
"name": "Bar",
"isDefault": false
}
]
}
],
"quantity": 7
}
]
Grazie!
Mostra un documento di esempio dalla tua raccolta. Ma se "customerID" è in realtà un raggruppamento tra documenti, allora quello che stai facendo non funzionerà se vuoi che i documenti originali vengano restituiti. Mostra i documenti di origine e i risultati attesi. –
@NeilLunn Ho aggiornato il post ora. CustomerId non è un raggruppamento tra documenti, solo un campo in questo documento. – donpisci