数据模型 - 如何在GAE中构造实体

时间:2015-07-04 12:04:40

标签: android google-app-engine google-cloud-datastore

我是一名Android开发人员。我有一个连接到服务器中的MySql DB的应用程序。现在我打算将它们迁移到Google应用引擎。但我仍然坚持如何构建我的实体。

有表'用户'和'书'。用户可以拥有多本书,一本书可以由多人拥有。所以有一个名为'book-owners'的参考表。此表中有一列称为读取的页数。所以每个用户预订关系都有这个特殊的属性'不。页面读取'。

使用MySql,我可以执行连接查询以获取我想要的所有信息。现在使用GAE我们无法执行连接查询。我想要的就是这些,

  1. 用户拥有的所有书籍以及“否”。页面内容为'property
  2. 特定图书的所有者数量
  3. 当我查询用户时,我需要以下响应:

    {"user_id":"123","user_name":"John Doe","books":[{"book_id":"123456", "book_name":"Some book name","pages_read":126},{"book_id":"123457","book_name":"Some book name","pages_read":26},{"book_id":"123458","book_name":"Some book name","pages_read":274},{"book_id":"123459","book_name":"Some book name","pages_read":48}]}
    

    那么如何构建我的实体。以及如何查询它们?请给我一些建议/指示。谢谢。

1 个答案:

答案 0 :(得分:2)

这是一种方式:

class User(ndb.Model):
    [any data here you want]

class Book(ndb.Model):
    [any data here you want]

class OwnedBook(ndb.Model):
    user = ndb.KeyProperty(User)
    book = ndb.KeyProperty(Book)
    pages_read = ndb.IntegerProperty()

要获取阅读了网页的用户所拥有的图书,请执行以下操作:

books_owned_by_user = OwnedBook.query(OwnedBook.user = user1)

获取OwnedBook个实体后,您需要进一步查询以获取有关这些图书的更多信息。

for owned_book in OwnedBook.query(OwnedBook.user = user1):
    book = owned_book.book.get()

您需要考虑如何有效地为您的特定应用程序执行此操作。

要获得图书所有者的数量,请执行以下操作:

num_owners = OwnedBook.query(OwnedBook.book = book1).count()