MongoDB запрос findOne не работает с API Nodejs?

#node.js #mongodb

Вопрос:

Пытаюсь найти сведения об одном документе по идентификатору с помощью POST API, но API возвращает error 500 данные с помощью MongoDB и Node.js.

Схема

     {
    "_id": {
        "$oid": "5cad89cabfb35db56688556c"
    },
    "articleid": "c4a3c72a-f4ec-11e7-bec2-b083fe9a696b",
    "md5id": "8e0d6ca665a977cc825bd90dc1751d53",
    "headline": "Stepping up",
    "subtitle": "",
    "type": "PRINT",
} 
 

Model.js

 var mongoose = require('mongoose');

var schema = new mongoose.Schema({

Title: String
 },
{
    collection: 'impactliveupdated'
});

module.exports = mongoose.model('Model', schema);
 

controller.js

   articlesById = function (req, res) {
  var articleids = req.body.articleids;
  var query = {

  };
  query.articleid = {
      $in: articleids
  }; 

  articlesModule.findOne(query, function (err, impacts) {
      if (err) {
          console.log("error 6");
          console.log(err);
          res.status(500);
          res.send("internal error");
      } else {
          res.status(200);
          console.log("sending data");
         // console.log(impacts);
          res.json(impacts);
      }
  });
} 
 

если возможно, помогите мне исправить это, я новичок в MEAN stack!

Комментарии:

1. Есть ли articleId в схеме? Не отображается в коде.

2. да Идентификатор статьи находится в поле документа

3. В вашей схеме отображается только один заголовок поля. Вы путаете _id с articleid? Вы также можете использовать findById.

4. @TusharShahi У меня есть имя поля articleid , по которому я пытаюсь найти, нужно ли мне его указывать articleid Model.js schema ?

5. ДА. будет лучше, если вы это сделаете. Кроме того, я спрашивал о статьях. оператор $in работает с массивами справа. Если идентификатор статьи из документа находится внутри [Идентификаторы статей], который отправляется в теле вашего запроса, он вернет документ.

Ответ №1:

Во-первых, вам не нужно использовать оператор $in, как предлагает @Tusharshahi, и вы можете использовать прямой запрос findOne.

   articlesById = function (req, res) {
  var articleid = req.body.articleid; 

  articlesModule.findOne({articleid:articleid}, function (err, impacts) {
      if (err) {
          console.log("error 6");
          console.log(err);
          res.status(500);
          res.send("internal error");
      } else {
          res.status(200);
          console.log("sending data"); 
          res.json(impacts);
      }
  });
}