【发布时间】:2014-12-13 15:25:04
【问题描述】:
我有一份遵循此表格的文件:
{
created_by: 'user1',
created_on: '2014-10-1022: 32: 12.000',
submitted: true,
submitted_on: '2014-10-1022: 32: 12.000',
submitted_by: user2,
approved: true,
approved_by: 'adminUser2',
approved_on: '2014-10-1022: 32: 12.000',
form_title: 'FormTitle1',
form_id: 12,
header_responses: [
{
header_field_id: 1, sequence: 1,
responses: [
{
submitted_by: 'user1', submitted_on: '2014-10-1022: 32: 12.000',
values: ['xxx' ]
}
]
]
},
{
header_field_id: 2,
sequence: 2,
responses: [
{
submitted_by: 'user1', submitted_on: '2014-10-1022: 32: 12.000',
values: ['yyy', 'zzz']
},
{
submitted_by: 'user2', submitted_on: '2014-10-1022: 32: 12.000',
values: ['aaa','bbb']
}
]
}
]
}
所以,FormResponses 有一个header_responses 的数组,实习生有一个responses 的数组,然后有一个values 的数组。这是为了让系统保持历史记录,所以当我显示FormResponse 时,我只显示最后一组response ``values`,但我仍然有保存的历史记录。
现在我需要实现一个过滤系统,但我不确定如何实现。我需要做的是返回所有FormResponses,它们的header_field_id 等于某个ID,并且最后一个响应值包含一些东西。我找到了this posting,但它只处理一级数组,我不确定如何处理两级数组。我尝试了一些东西,但它们都很可笑和牵强,所以我不会分享它们,因为它们注定要失败。
更新
预期响应:我希望能够搜索标题为某个 _id 且 last response 具有一定价值的文档。例如,FormResponse 文档的标头 ID 为 2,并且该标头的最后响应是“xyz”。这不应与任何将“xyz”作为历史值的内容匹配。
更新 2
我想我已经很接近了:
FormResponses.find( {
header_responses: {
$elemMatch: {
header_field_id: "BZ6NzfgxK4r38274d",
responses: {
$elemMatch: {
values: "9999"
}
}
}
}
}).fetch();
但这匹配任何值为“9999”的值,而不仅仅是最后一个。
【问题讨论】:
-
预期输出是什么?
-
我添加了更多细节。这里的关键是我只想匹配响应数组中的 LAST 子文档。
标签: mongodb mongodb-query