запрос findOne mongoose не работает должным образом - PullRequest
0 голосов
/ 01 февраля 2019

Я использовал экспресс для создания этого веб-приложения.У меня также есть модель мангуста:

{
  username: { type: String, required: true, unique: true },
  password: { type: String, required: true },
  notes: [{
    name: { type: String, required: true }
  }]
}

Когда я пытаюсь найти объект внутри массива (Примечания) ->

modelName.findOne({ "notes:" {$elemMatch: {"_id": req.body.id } }})
  .exec()
  .then(result => {
    console.log(result);
  })
  .catch(err => {
    console.log(err);
  });

Я получаю целый объект модели одного пользователя вместо одной заметки,Вот результат, который я получаю:

{
  "_id": "5c51dd8be279e9016716e5b9",
  "username": "user1",
  "password": "",
  "notes": [
    {
      "_id": "5c51dd8be279e901671gagag",
      "name": "name of note1"
    },
    {
      "_id": "5c51ff8be279e901671gagag",
      "name": "name of note"
    },
    {
      "_id": "5c51dd8be2131501671gagag",
      "name": "name of note"
    }
  ]
}

Однако я ожидаю получить что-то вроде этого:

{
  "_id": "5c51dd8be279e901671gagag",
  "name": "name of note1"
}

PS: Это не дублирует этот ответ Mongoose Mongodb запрашивает массив объектов .Я уже пытался использовать код из этого вопроса, но это не решает мою проблему

1 Ответ

0 голосов
/ 01 февраля 2019

findOne () работает просто отлично.findOne () возвращает любой документ, который соответствует указанному запросу, а не часть документа.Если вам нужна только часть этого документа, вам придется получить его в двух частях ...

modelName.findOne({ "notes": {$elemMatch: {"_id": req.body.id } }})
.exec()
.then(result => {
  // Will get an array of notes whose _id === req.body.id
  const resNote = result.notes.filter(n => n._id === req.body.id);
  console.log(resNote);
})
.catch(err => {
console.log(err);
});

См. Документацию здесь .Если вы заметили, это упоминает, что функция «находит один документ».

...