Mongodb $elemMatch与嵌套对象(或其他解决方案)

Mongodb $elemMatch与嵌套对象(或其他解决方案),mongodb,Mongodb,我有一组相册,例如: var album = { name: 'album1', tracks: [{ title: 'track0', language: 'en', processing: { tasks: [ {name: 'someTask', started: '12/12/12' }, {name: 'someTask', start

我有一组相册,例如:

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) 对于特定的唱片集和曲目,我需要按名称选择任务,例如(唱片集1和曲目0的所有“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' },
            ]
        }
   ]
}
对于作为结果的第二个查询,我需要得到:

{
    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尝试了不同的Varian,如:

tracks: {$elemMatch: {'processing.tasks': {$elemMatch:{name: 'someTask'}}}}
但在结果中,我得到了所有processing.tasks,而不仅仅是名为“someTask”的任务


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

您正在尝试制作嵌入式文档。。。不要认为他们支持聚合框架是可能的,问题是,如果可能的话,我希望在没有它的情况下完成它。虽然使用聚合框架是可能的,但您可能需要重新考虑您的模式设计-当您需要对嵌入的多个级别元素进行操作时,您将在所能做的方面受到很大限制。您是否考虑过让track成为顶级文档,让album成为它的(索引)属性?那么您只有一个级别的数组/嵌入。另一种方法是使用嵌入式文档进行跟踪,而不是数组,但是在不了解整个用例的情况下,如果不引入新的问题,很难说这是否能解决所有问题。@Asya Kamsky面向文档的数据库的优势在哪里?这首歌并不是很大,和这张专辑并没有很深的联系。也许我会考虑把处理从记录中移走。谢谢你的小费。