sql >> Databasteknik >  >> NoSQL >> MongoDB

Returnera resultat endast som en matris med värden

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.



  1. MongoDB Index på olika typer

  2. Importera data till dina nyskapade MongoDB-instanser

  3. MongoDB inbäddade objekt har inget ID (nullvärde)

  4. 4 sätt att uppdatera ett dokument i MongoDB