1

我正在使用 Python Flask 开发一个带有 JSON API 的平台。在某些情况下,我需要加入三个表。如何连接具有一组 ID 的表给了我一些指导,但我需要一个解决方案。

假设我们有三个用于消息传递应用程序的表。

  1. 账户
  2. 对话
  3. 留言
  4. 留言阅读器

帐户表片段

{
    "id": "account111",
    "name": "John Doe",
},

对话表片段

{
    "id": "conversation111",
    "to": ["account111", "account222", "account333"], // accounts who are participating the conversation
    "subject": "RethinkDB",
}

消息表片段

{
    "id": "message111",
    "text": "I love how RethinkDB does joins.",
    "from": "account111", // accounts who is the author of the message
    "conversation": "conversation111"
}

消息阅读器表片段

{
    "id": "messagereader111",
    "message": "message111",
    "reader": "account111",
}

我的问题是“当我收到对 id="account111" 的帐户文档的获取请求时,获取以下文档的神奇查询是什么?”

{
    "id": "account111",
    "name": John Doe,
    "conversations": [            // 2) Join account table with conversations
        {
           "id": "conversation111",
           "name": "RethinkDB",
           "to": [                     // 3) Join conversations table with accounts
               {
                    "id": "account111",
                    "name": "John Doe",
               },
               {
                    "id": "account222",
                    "name": "Bobby Zoya",
               },
               {
                    "id": "account333",
                    "name": "Maya Bee",
               },
           ]
           "messages": [        // 4) Join conversations with messages
               {
                   "id": "message111",
                   "text": "I love how RethinkDB does joins.",
                   "from": {        // 5) Join messages with accounts
                        "id": "account111",
                        "name": "John Doe",
                   },
                   "message_readers": [
                       {
                           "name": "John Doe",
                           "id": "account111",
                       }
                   ],
               },
           ],
        },
    ],
}

任何指导或建议都会很棒。JavaScript 或 Python 代码会很棒。

4

1 回答 1

4

我很难理解您想要什么(您有多个 id 为 111 的文档),但我认为这是您要查找的查询

Python 查询:

r.table("accounts").map(lambda account: 
    account.merge({
        "conversations": r.table("conversations").filter(lambda conversation: 
            conversation["to"].contains(account["id"])).coerce_to("array").map(lambda conversation:
            conversation.merge({
                "to": conversation["to"].map(lambda account: 
                    r.table("accounts").get(account)).pluck(["id", "name",]).coerce_to("array"),
                "messages": r.table("messages").filter(lambda message:
                    message["conversation"] == conversation["id"]).coerce_to("array").map(lambda message:
                    message.merge({
                        "from": r.table("accounts").get(message["from"]).pluck(["id", "name",]),
                        "readers": r.table("message_readers").filter(lambda message_reader:
                            message["id"] == message_reader["message"]).coerce_to("array").order_by(r.desc("created_on")),
                    })).order_by(r.desc("created_on"))
            })).order_by(r.desc("modified_on"))
    })).order_by("id").run(db_connection)
于 2014-02-15T05:19:50.880 回答