检索包含另一个文档属性的数组的文档



我正在Mongo中存储某种文件系统,其中目录被命名为类别。

目录JSON如下:

{
   "name":"CategoryChildLevel2",
   "parentId":"2",
   "otherAttribute":"anyVal",
   "breadcrumb":[
      {
         "name":"RootCategory",
         "id":"1"
      },
      {
         "name":"CategoryChildLevel1",
         "id":"2"
      }
   ]
}

FS类别通过parentId属性链接在一起。

我需要显示类别面包屑。通过用户导航,我们可以知道我们在FS上的位置,但是类别可以通过它们的ID(书签类别,搜索引擎…)直接访问,而不需要任何FS导航。为了避免对DB的递归调用,为了能够得到面包屑,我对它进行了反规范化。


问题是这个面包屑很难保持最新,因为顶级类别可以移动,因此它的所有子面包屑必须更新。可能有许多子类别需要更新,并且有不同的方法来处理这个问题。其中一些是安全的,但代价高昂(递归),另一些更快,但可能导致一些不一致。


这里我想知道的是,如果有可能做一个查询来检索有一个坏面包屑的类别。我需要一个允许这样做的查询:

检索不包含:last数组元素的所有类别面包屑。id = parentId

我不认为"最后一个数组元素"部分是可能的,但它也会很好,能够做到:

检索所有没有:面包屑。id包含parentId

任何解决方案,可在Scala或Java驱动程序?我用的是Salat/Casbah

这个问题可以帮助你理解我所面临的问题:你会使用哪个数据库?MongoDB/Neo4j/SQL……所有人?

您可以使用$where运算符执行 Retrieve all the categories that do not have: last array element breadcrumb.id = parentId 查询:

db.test.find({
    // Find docs were breadcrumb is empty or its last element's id != parentId
    $where: '!this.breadcrumb.length || this.breadcrumb[this.breadcrumb.length-1].id !== this.parentId' 
})

相关内容

  • 没有找到相关文章

最新更新