应用引擎查询

时间:2012-06-28 17:45:33

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

我是app-engine数据存储区和NoSQL世界的新手。我正在开发一个简单的应用程序,用户可以每天申报他/她的费用。每个用户(帐户)都有自己的申报费用。仪表板包含一个简单的GWT单元树,其中包含使用申报费用的所有年份,以及当他/她点击一年时,他获得了这些年的所有月份,然后他点击了月份,他获得了所有的日子当月,最后点击一天,他获得当天宣布的所有费用。它就像

* 2010

|_ jan
 |_1
 |_2
  |_Food 12d 
  |_Dress 200d 
  |_Fun 150d
  |_ ...

|_ feb 
|_ ...

* 2011

| _ jan

| _ feb | _...

我将每个用户(帐户)的费用实体保存在数据存储中,作为所有费用的父项。我的费用如下: 公共类Expense实现Serializable,Comparable {

 private String name;
  private double price;
  private Date date;

  public Expense(String name, double price, Date date) {

    this.name = name;
    this.price = price;
    this.date = date;
  }

  public Expense() {
  }

  public String getName() {
    return name;
  }

  public double getPrice() {
    return price;
  }

  public boolean isPriceValid() {
    return price > 0;
  }

  public void setName(String name) {
    this.name = name;
  }

  public void setPrice(double price) {
    this.price = price;
  }

  public Date getDate() {
    return date;
  }

  public void setDate(Date date) {
    this.date = date;
  }

  @Override
  public int compareTo(Expense expense) {
    if (name.equals(expense.getName())) {
      if (date.equals(expense.getDate())) {
        return new Double(price).compareTo(expense.getPrice());
      }
      return date.compareTo(expense.getDate());
    }
    return name.compareTo(expense.getName());
  }

我的问题是:如何查询数据存储中的费用并将所有不同年份的服务返回到指定的帐户,并将它们放在列表或集合或其他我可以列出的地方?我需要获取所有费用实体并迭代它们并获得所有不同的年份。听起来不合理。任何建议都将受到欢迎,并感谢您的进步。

1 个答案:

答案 0 :(得分:1)

有关您帖子的几条评论:

- >我不会将财务金额存储为Double。走这条路线将导致你出现舍入错误的大问题。这个上有很多帖子。我建议你把它存储为“DollarCent”并将其声明为整数。您只需在存储时将金额乘以100,并在显示时将其除以100.

- >为什么要将数据存储区中的实体声明为实现Serializable?我会在没有Seri​​alizable的情况下存储。

- >与按年显示数据的具体问题相关,阅读您的问题除了获取数据外,我没有别的办法。我要做的是要求GAE订购数据以避免之后订购。使用Objectify,它只是q.filter(...)。order(-date).order(amount)。

希望这有帮助!

Hugues