Mon goose - при возврате всех элементов из коллекции (без параметров поиска) возвращенные элементы из коллекции не содержат их mon go _id - PullRequest
0 голосов
/ 16 марта 2020

У меня сегодня немного проблемы с Mongoose / MongoDB. У меня есть ситуация, когда мне нужно вернуть все элементы из коллекции, и это означает, что я не передаю никаких параметров поиска в mongoose.find().

Это контроллер, который обрабатывает запрос get all:

exports.get_all_posts = async (req, res, next) => {
  const { params } = req;
  const { sortby } = params;

  //Sortby param takes two arguments for now: most_recent, oldest
  try {
    const getAllPosts = await BlogPost.find({}, { _id: 0 });

    console.log(getAllPosts);

    if (!getAllPosts) throw new Error('Could not get blog posts.');

    res.json({
      posts: date_.sort(getAllPosts, sortby)
    });
  } catch (error) {
    next(error);
  }
};

Именно здесь, я думаю, возникла проблема:

const getAllPosts = await BlogPost.find({}, { _id: 0 });

Я передаю пустой параметр поиска и затем удаляю _id, чтобы он не выдает ошибку, сообщающую, что мне нужно предоставить _id.

Однако мне все еще нужно иметь возможность извлекать все сообщения. Мои предметы из этой коллекции возвращаются как обычно, только без их _id.

Вот моя модель для постов в блоге:

const mongoose = require('mongoose');

const BlogPostSchema = new mongoose.Schema({
  date: {
    type: Date,
    required: true
  },
  title: {
    type: String,
    required: true
  },
  author: {
    type: String,
    required: true
  },
  likes: {
    type: Number,
    required: false
  },
  post_body: {
    type: String,
    required: true
  },
  description: {
    type: String,
    required: true
  },
  tags: [
    {
      type: String,
      required: false
    }
  ],
  featuredImage: {
    type: String,
    required: false
  },
  draft: {
    type: Boolean,
    required: true
  }
});

module.exports = mongoose.model('BlogPost', BlogPostSchema);

Следует отметить, что я не определил _id. Mon goose автоматически добавляет в поле _id перед сохранением схемы, поэтому я думаю, что без нее все нормально, как это было в прошлом.

Заранее спасибо за прочтение и любой вклад!

Ответы [ 2 ]

1 голос
/ 17 марта 2020

Так же, как прокомментировал Джо , { _id: 0 }, поскольку второй параметр заставляет ваш запрос не возвращать поле _id.

Также, как он сказал, проблем быть не должно что бы ни было с использованием find({}).

Так как кроме того, что уже было сказано, я не смог обнаружить никакой ошибки в предоставленных вами фрагментах кода, я думаю, эта ошибка может происходить откуда-то еще в вашем проекте .

0 голосов
/ 17 марта 2020
exports.get_all_posts = async (req, res, next) => { const { params } = req; const { sortby } = params;
 try { const getAllPosts = await BlogPost.find({}); console.log(getAllPosts); if (!getAllPosts) throw new Error('Could not get blog posts.'); res.json({ posts: date_.sort(getAllPosts, sortby) }); } catch (error) { next(error); } };

нет необходимости {_id: 0} в методе find () , так как этот метод извлекает все документы в коллекции БД

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...