我正在尝试使用 elemMatch 查询数据集合以从对象数组中仅返回一个对象。我有这个数据:
[
{
"_id": "5ba10e24e1e9f4062801ddeb",
"user": {
"_id": "5b9b9097650c3414ac96bacc",
"firstName": "blah",
"lastName": "blah blah",
"email": "blah@gmail.com"
},
"appointments": [
{
"date": "2018-09-18T14:39:36.949Z",
"_id": "5ba10e28e1e9f4062801dded",
"treatment": "LVL",
"cost": 30
},
{
"date": "2018-09-18T14:39:32.314Z",
"_id": "5ba10e24e1e9f4062801ddec",
"treatment": "LVL",
"cost": 30
}
],
"__v": 1
}
]
我需要查询数据库并根据传递给参数的 ID 提取一个约会。我根据文档 here 使用下面的代码.
router.get(
"/booked/:app_id",
passport.authenticate("jwt", { session: false }),
(req, res) => {
Appointment.find()
.elemMatch("appointments", { id: req.params.app_id })
.then(app => res.json(app));
}
);
当我用 postman 测试时,这返回一个空数组。这是我第一次使用 Node.js 和 mongoDB,因此我们将不胜感激。谢谢。
最佳答案
您正在使用 elemmatch as query operator ,但您需要将其用作 projection operator
将您的功能更改为:
Appointment.find(
{"appointments": {$elemMatch: {_id: req.params.app_id }}},
{"appointments": {$elemMatch: {_id: req.params.app_id }}}
)
为什么两次?
查找查询参数中的第一个对象是$elemmatch查询运算符。它将返回所有文档,这些文档在约会数组中至少有一个与 _id 匹配的条目。 (但会返回整个文档)
第二个对象(相同)是elemmatch投影操作符,它“过滤”约会数组并仅返回数组中的第一个匹配元素。
PS:无法测试此命令。站在你这边试试
关于javascript - 使用 elemMatch 从数组 Node.js 返回一个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52442069/