sql >> Base de Datos >  >> NoSQL >> MongoDB

Devuelve el resultado solo como una matriz de valores

Puedes map() . Usa Array.map() con mongoose ya que devuelve una matriz, y es mejor que simplemente use el $group _id que usar $push

const subCategory = (await SubCategory.aggregate([
  { '$match': { category: "dining" } },
  { '$group': { '_id': "$name" } }
])).map(({ _id }) => _id);

O con Cursor.map() si usa la Collection subyacente del controlador principal:

const subCategory = await SubCategory.collection.aggregate([
  { '$match': { category: "dining" } },
  { '$group': { '_id': "$name"  } }
]).map(({ _id }) => _id).toArray();

Casi lo mismo con find() si no desea los resultados "distintos":

const subCategory = (await Subcategory.find({ category: "dining" }))
  .map(({ name }) => name);

O con el Cursor.map()

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

También puede usar distinct() , que básicamente hace una variación del proceso de agregación y el map() "bajo el capó" (el "devolver solo la parte del campo" y no el método de agregación distinto):

const subCategory = await SubCategory.distinct("name",{ category: "dining" });

MongoDB en sí mismo no devolverá nada más que un documento BSON, y una cadena simple NO es un documento BSON.