我已经使用express创建了这个网络应用程序。 我也有猫鼬模型:
{
username: { type: String, required: true, unique: true },
password: { type: String, required: true },
notes: [{
name: { type: String, required: true }
}]
}
当我尝试在array内查找对象时(Notes)->
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的重复项。我已经尝试过使用该问题中的代码,但这并不能解决我的问题
答案 0 :(得分:2)
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);
});
请参阅文档here。如果您注意到的话,它提到函数“找到一个文档”。