MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Restituisce il risultato solo come matrice di valori

Puoi map() . Usa Array.map() con mongoose in quanto restituisce un array e è meglio usare semplicemente il $group _id rispetto all'utilizzo di $push

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

O con Cursor.map() se si utilizza la Collection sottostante dal driver principale:

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

Più o meno lo stesso con find() se non vuoi i risultati "distinti":

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

O con il Cursor.map()

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

Puoi anche usare distinct() , che sostanzialmente fa una variazione del processo di aggregazione e di map() "sotto il cofano" (il "restituisci solo la parte del campo" e non il metodo di aggregazione distinto):

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

MongoDB stesso non restituirà nient'altro che un documento BSON e una semplice stringa NON è un documento BSON.