MongoDB:DBREF列表中的嵌套搜索

时间:2015-11-11 12:17:06

标签: mongodb-query mongodb-java

我在使用嵌套DBREF列表的Mongo数据库前面。 (是的,我知道使用Mongo是一种非常奇怪的方式,除此之外,最好不要使用@DBREF

我们有读者,书籍和作者的集合。

读者看起来像这样:

{
    "_id" : ObjectId("12345"),
    "age" : 37,
    "books" : [ 
        {
            "$ref" : "book",
            "$id" : "123"
        }, 
        {
            "$ref" : "book",
            "$id" : "456"
        }
    ]
}

$ref包含集合名称,$id包含图书的ID。

显然,这些书看起来一样;他们有一份DBREF的作者列表,而不是书籍DBREF列表。

两个问题:

  1. 有没有办法在列表中列出包含author1书籍的读者?
  2. 如何列出仅包含作者少于40年的图书的读者?
  3. 尝试用Java解决这个问题......

1 个答案:

答案 0 :(得分:1)

要使用Java驱动程序基于数据库引用进行查询,请使用类DBRef

1。有没有办法在列表中列出包含author1书籍的读者?

是。通过单独的查询获取author1的所有图书ID,然后找到所有具有图书参考$in图书ID列表的读者。

2。如何列出只有作者少于40年的书籍的读者?

这一次,您需要三个查询:

  1. 查找所有40岁以下作者的ID
  2. 查找所有拥有ID $in作者的书籍,其中包含您在步骤1中的列表。
  3. 查找所有拥有ID $in的图书的读者,该图书位于第2步。
  4. 这可能非常繁重,但这是您在不支持连接的数据库中以规范化方式存储数据所能获得的。另一种方法是以简化查询的方式重构数据。