MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Ergebnis nur als Array von Werten zurückgeben

Sie können map() . Verwenden Sie Array.map() mit Mongoose, da es ein Array zurückgibt, und Sie sind besser dran, einfach die $group zu verwenden _id als mit $push

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

Oder mit Cursor.map() wenn die zugrunde liegende Collection verwendet wird vom Kerntreiber:

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

Ähnlich verhält es sich mit find() wenn Sie die "eindeutigen" Ergebnisse nicht wollen:

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

Oder mit Cursor.map()

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

Sie können auch distinct() verwenden , das im Grunde eine Variation des Aggregationsprozesses und des map() ausführt "unter der Haube" (die "Rückgabe nur des Feldteils" und nicht die eindeutige Aggregationsmethode):

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

MongoDB selbst gibt nichts anderes als ein BSON-Dokument zurück, und eine einfache Zeichenfolge ist KEIN BSON-Dokument.