MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Retornar o resultado apenas como uma matriz de valores


Você pode map() . Use Array.map() com mangusto, pois ele retorna um array, e é melhor você simplesmente usar o $group _id do que usar $push
const subCategory = (await SubCategory.aggregate([
  { '$match': { category: "dining" } },
  { '$group': { '_id': "$name" } }
])).map(({ _id }) => _id);

Ou com Cursor.map() se estiver usando a Collection subjacente do driver principal:
const subCategory = await SubCategory.collection.aggregate([
  { '$match': { category: "dining" } },
  { '$group': { '_id': "$name"  } }
]).map(({ _id }) => _id).toArray();

Muito parecido com find() se você não quiser os resultados "distintos":
const subCategory = (await Subcategory.find({ category: "dining" }))
  .map(({ name }) => name);

Ou com o Cursor.map()
const subCategory = await Subcategory.collection.find({ category: "dining" })
  .map(({ name }) => name).toArray();

Você também pode usar distinct() , que basicamente faz uma variação do processo de agregação e do map() "sob o capô" (o "retorno apenas a parte do campo" e não o método de agregação distinto):
const subCategory = await SubCategory.distinct("name",{ category: "dining" });

O próprio MongoDB não retornará nada além de um documento BSON, e uma string simples NÃO é um documento BSON.