带有嵌套对象的$ elemMatch(或其他一些解决方案)

时间:2013-03-17 07:53:38

标签: mongodb

我有一系列专辑,相册的例子:

var album = {
    name: 'album1',
    tracks: [{
        title: 'track0',
        language: 'en',
        processing: {
            tasks: [
                {name: 'someTask', started: '12/12/12' },
                {name: 'someTask', started: '12/10/12' },
                {name: 'anotherTask', started: '12/12/10', finished: '12/12/10' }
            ]
        }


    },{
        title: 'track1',
        language: 'en',
    },{
        title: 'track2',
        language: 'es',
    }]
}

如何实现以下目标 1)对于特定的专辑和曲目我需要按名称选择任务,例如(Album1和track0的所有'someTask')

2)第二个问题是选择未完成的任务中的最后一个任务。

因此,对于第一个查询,我需要得到:

{
    name: 'album1'
    tracks: [{
        title: 'track0',
        language: 'en',
        processing: {
            tasks: [
               {name: 'someTask', started: '12/12/12' },
               {name: 'someTask', started: '12/10/12' },
            ]
        }
   ]
}

对于第二个查询,我需要得到:

{
    tracks: [{
        title: 'track0',
        language: 'en',
        processing: {
            tasks: [
                {name: 'someTask', started: '12/10/12' },
            ]
        }
   ]
}

所以我想只选择一个满足标准的任务。 我用$ elemMath尝试了不同的varians:

tracks: {$elemMatch: {'processing.tasks': {$elemMatch:{name: 'someTask'}}}}

但是在结果中我得到了所有的处理。不仅仅是名为'someTask'的任务。

第二个更复杂,我不知道如何处理它。

0 个答案:

没有答案