我有一份遵循此表格的文件:
{
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']
}
]
}
]
}
因此,FormResponse
拥有header_responses
数组,实习生的数组为responses
,其数组为values
。这是为了让系统保持历史记录,所以当我显示FormResponse
时,我只显示最后一组response
``值`,但我仍然记录了保存的历史。< / p>
现在我需要实现一个过滤系统,但我不确定如何。我需要做的是返回FormResponse
等于某个ID且具有包含某些内容的最后一个响应值的所有header_field_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”,而不仅仅是最后一个。
答案 0 :(得分:1)
header_field_id = 2和响应值= zzz
的示例db.FormResponse.find({
header_responses:{
$elemMatch:{
header_field_id:2,
responses:{
$elemMatch:{
values:'zzz'
}
}
}
}
})