Du kan map() . Använd Array.map() med mongoose eftersom den returnerar en array, och du är bättre av att helt enkelt använda $group _id än att använda $push
const subCategory = (await SubCategory.aggregate([
{ '$match': { category: "dining" } },
{ '$group': { '_id': "$name" } }
])).map(({ _id }) => _id);
Eller med Cursor.map() om du använder den underliggande Collection från kärndrivrutinen:
const subCategory = await SubCategory.collection.aggregate([
{ '$match': { category: "dining" } },
{ '$group': { '_id': "$name" } }
]).map(({ _id }) => _id).toArray();
Ungefär samma sak med find() om du inte vill ha de "särskilda" resultaten:
const subCategory = (await Subcategory.find({ category: "dining" }))
.map(({ name }) => name);
Eller med Cursor.map()
const subCategory = await Subcategory.collection.find({ category: "dining" })
.map(({ name }) => name).toArray();
Du kan också använda distinct() , som i princip gör en variant av aggregeringsprocessen och map() "under huven" ( "retur bara fältdelen" och inte den distinkta aggregeringsmetoden):
const subCategory = await SubCategory.distinct("name",{ category: "dining" });
MongoDB själv kommer inte att returnera något annat än ett BSON-dokument, och en enkel sträng är INTE ett BSON-dokument.