Вы можете map()
.Используйте Array.map()
с mongoose, поскольку он возвращает массив, и вам лучше просто использовать $group
_id
, чем использовать $push
const subCategory = (await SubCategory.aggregate([
{ '$match': { category: "dining" } },
{ '$group': { '_id': "$name" } }
])).map(({ _id }) => _id);
Или с Cursor.map()
при использовании базового Collection
из основного драйвера:
const subCategory = await SubCategory.collection.aggregate([
{ '$match': { category: "dining" } },
{ '$group': { '_id': "$name" } }
]).map(({ _id }) => _id).toArray();
То же самое с find()
, если вы используетене хотите «отличных» результатов:
const subCategory = (await Subcategory.find({ category: "dining" }))
.map(({ name }) => name);
или с Cursor.map()
const subCategory = await Subcategory.collection.find({ category: "dining" })
.map(({ name }) => name).toArray();
Вы также можете использовать distinct()
, который в основном делает изменение процесса агрегации и map()
"под капотом" ("вернуть только часть поля", а не отдельный метод агрегации):
const subCategory = await SubCategory.distinct("name",{ category: "dining" });
сам MongoDBне вернет ничего, кроме документа BSON, и простая строка НЕ является документом BSON.