[英]Using elemMatch to return one object from array node.js
我正在尝试查询数据集合以使用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
}
]
我需要查询数据库,并根据传递给params的id仅提取一个约会。 我正在根据此处的文档使用下面的代码。
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));
}
);
但是,当我用邮递员测试时,这将返回一个空数组。 这是我第一次使用node.js和mongoDB,因此将不胜感激。 谢谢。
您正在使用elemmatch作为查询运算符 ,但需要将其用作投影运算符
将功能更改为此:
Appointment.find(
{"appointments": {$elemMatch: {_id: req.params.app_id }}},
{"appointments": {$elemMatch: {_id: req.params.app_id }}}
)
为什么两次?
查找查询参数中的第一个对象是$ elemmatch查询运算符 。 它将返回所有文档,其中在约会数组中至少有一个与_id匹配的条目。 (但将返回整个文档)
第二个对象(相同)是elemmatch projection oprator ,它“过滤”约会数组并仅返回数组中的第一个匹配元素 。
PS:无法测试此命令。 尝试在你身边
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.