使用传递的MongoDB查询在数组中定位第一个对象

时间:2017-09-28 20:05:58

标签: javascript jquery arrays mongodb

我正在使用通过POST请求传递的mongoDB查询来返回数据子集:

body: any = {"services.history": { "$elemMatch": { "status": "orientation", "enrolled" : true } }};

这是按预期工作的。但是,我们会将我们的实施更改为定位状态,并检查它是"历史记录中的第一个项目"阵列。如何通过修改上述查询来实现这一目标?

我认为这可能有效,但没有去:

body: any = {"services.history[0]": { "$elemMatch": { "status": "orientation", "enrolled" : true } }};

我也试过点符号,但仍然没有去:

body: any = {"services.history.0": { "$elemMatch": { "status": "orientation", "enrolled" : true } }};

如何在POST请求中使用此类查询仅定位数组中的第一项?换句话说,如果elemMatch匹配并且它是"历史"中的第一项,我只希望它返回true。阵列。我只需要对history数组上的第一个对象运行此检查,因为我知道它将是后端数组中最新的(最相关的)数据对象。

我查询的数据如下所示:

  "history": [
                {
                    "status": "oritentation",
                    "endDate": "2012-09-26T06:00:00.000Z",
                    "startDate": "2011-03-26T06:00:00.000Z",
                    "_id": "1259c4d250502sa434788",
                    "enrolled": true,
                }
             ]

1 个答案:

答案 0 :(得分:2)

如果阵列的子文档中没有其他字段,则可以执行以下操作:

body: any = {"services.history.0": { "status": "orientation", "enrolled" : true } }

如果您有其他字段,则可以执行此操作:

body: any = { "services.history.0.status": "orientation", "services.history.0.enrolled": true }