postman findOne mongoose查询无法正常工作

yduiuuwa  于 11个月前  发布在  Postman
关注(0)|答案(2)|浏览(111)

我使用express来创建这个web应用程序。我也有 Mongoose 模型:

{
  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"
}


P.S:它不是这个答案Mongoose Mongodb querying an array of objects的重复。我已经尝试使用这个问题的代码,但它不能解决我的问题

tvz2xvvm

tvz2xvvm1#

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);
});

字符串
请参阅这里的文档。如果你注意到,它提到了函数“查找一个文档”。

50pmv0ei

50pmv0ei2#

你可以用这个代替

// Select only the modelName name and _id
modelName.findOne({ "notes:" {$elemMatch: {"_id": req.body.id } }}, '_id name').exec().  .then(result => {
    console.log(result);
  })
  .catch(err => {
    console.log(err);
  });
output: {
  "_id": "5c51dd8be279e901671gagag",
  "name": "name of note1"
}

字符串

相关问题