MongoDB:在 DBREF 列表中进行嵌套搜索

MongoDB: nested search in list of DBREFs

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

我们有 collection 的 reader 本书和作者。

reader 看起来像这样:

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

$ref 包含 collection 名称,$id 图书 ID。

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

两个问题:

  1. 有没有办法在 reader 的列表中列出作者 1 的书籍?
  2. 我如何列出只有不到 40 年作者的书的 reader?

正在尝试用 Java 解决这个问题...

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

1。有没有办法在他们的列表中列出作者 1 的书的读者?

是的。使用单独的查询获取 author1 的所有图书 ID,然后查找所有有图书参考的读者 $in 您的图书 ID 列表。

2。我如何列出只有不到 40 年作者的书的读者?

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

  1. 查找所有 40 岁以下作者的 ID
  2. 查找作者 ID 为第 1 步列表 $in 的所有图书。
  3. 找到所有拥有 ID 为第 2 步列表 $in 的图书的读者。

这可能相当繁重,但这就是您在不支持连接的数据库中以规范化方式存储数据所获得的结果。另一种方法是以简化查询的方式重组数据。