Пн goose получить массив объектов. Для каждого объекта я хочу только два свойства - PullRequest
0 голосов
/ 20 февраля 2020

Я просто практикую понедельник goose с JavaScript.

У меня есть эта схема mon goose ниже:

const item = new mongoose.Schema({
  name: {
    type: String,
    required: true,
    unique: true
  },
  qty: {
    type: Number,
    required: true
  },
  costPrice: Number
});

const supplySchema = new mongoose.Schema({
  items: [item]
});

const Supply = mongoose.model("Supply", supplySchema);

Сейчас я просто хочу получить массив item, используя mon goose.

Я sh мои данные будут выглядеть так:

[
  {
    "name" : "Lemon",
    "qty" : 5
  },
  {
    "name": "Sugar",
    "qty": 5
  }
]

Но сейчас данные, которые я получаю обратно, выглядит примерно так:

[
  {
    "_id": "5e4df1c1d48926133879f650",
    "costPrice": 0.4,
    "name": "Sugar",
    "qty": 5
  }
]

I попытался написать такой код ниже, но он не работает:

const supplyDoc = await Supply.findOne();
const supplies = await supplyDoc.items.select("-_id");
return supplies;

Я подумал, что мог бы как-то использовать проекцию на элементы и указать, что мне не нужно свойство _id для каждого объекта в массиве. Но мой код не работает. Можно ли использовать метод mon goose или MongoDB? Или я должен использовать javascript для управления массивом?

Надеюсь услышать несколько советов. спасибо!

Ответы [ 2 ]

0 голосов
/ 20 февраля 2020

Попробуйте сделать так

  let supplies= await models.Supplier.find( { }, { name:1,qty:1,_id: 0 } )
0 голосов
/ 20 февраля 2020

Прежде всего вы должны использовать Model.find () вместо Model.findOne (), если вы хотите массив элементов.

И да, вы можете использовать параметр проекции, чтобы выбрать нужные поля.

Итак

const supplies = await Supply.find({}, "name qty").exec()

Редактировать: Очевидно, что вам нужно специально исключить поле _id, вы можете сделать это, используя - в качестве префикса.

const supplies = await Supply.find({}, "-_id name qty").exec()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...