繁体   English   中英

使用elemMatch从数组node.js返回一个对象

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM