通过GQL WHERE查询字符串的GAE数据存储查看器似乎不起作用

时间:2013-10-12 05:26:29

标签: google-app-engine gql gqlquery

这是我的数据:

ID / Name createdTime customerName itemName价格数量状态user_orderid id = 5681726336532480 2013-10-12 05:07:47.794000“joe”“Nexus 5”349.00 1“待定”“1”

运行这两个查询中的任何一个都会给我数据:
SELECT * FROM order
SELECT * FROM order ORDER BY createdTime DESC

但是运行以下内容并没有给我任何结果:
SELECT * FROM order WHERE status ='pending'
SELECT * FROM order WHERE status ='pending'ORDER BY createdTime DESC

我在执行以下操作时会看到结果:
SELECT * FROM order WHERE status!='pending'

所以我知道WHERE子句有一些效果。我只是无法在GQL查询中获得“待定”以匹配数据存储区中的“待处理”。

我的索引定义如下:
订单状态▲,createdTime▼服务

我删除了记录并重新添加它以确保它是在索引到位后创建的。这没有用。 我一遍又一遍地阅读GQL参考页面,但没有找到任何真正有用的东西。 stackoverflow上的一些帖子表明我执行WHERE ='string'的语法是正确的。 但无论我做什么,我都无法为数据存储查看器或试图运行此查询的实际应用程序返回数据。

我在执行此处托管的App Engine代码实验练习8时遇到了这个问题:http://googcloudlabs.appspot.com/codelabexercise8.html

更新:以下是所要求的型号:

/**
 * <p>Java class for order complex type.
 * 
 * <p>The following schema fragment specifies the expected content contained within this class.
 * 
 * <pre>
 * &lt;complexType name="order">
 *   &lt;complexContent>
 *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
 *       &lt;sequence>
 *         &lt;element name="customer" type="{http://www.w3.org/2001/XMLSchema}string"/>
 *         &lt;element name="status" type="{http://www.w3.org/2001/XMLSchema}string"/>
 *         &lt;element name="user_orderid" type="{http://www.w3.org/2001/XMLSchema}string"/>
 *         &lt;element name="item" type="{http://www.w3.org/2001/XMLSchema}string"/>
 *         &lt;element name="quantity" type="{http://www.w3.org/2001/XMLSchema}positiveInteger"/>
 *         &lt;element name="price" type="{http://www.w3.org/2001/XMLSchema}decimal"/>
 *       &lt;/sequence>
 *       &lt;attribute name="id" type="{http://www.w3.org/2001/XMLSchema}long" />
 *     &lt;/restriction>
 *   &lt;/complexContent>
 * &lt;/complexType>
 * </pre>
 * 
 * 
 */
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "order", propOrder = {
    "customer",
    "status",
    "userOrderid",
    "item",
    "quantity",
    "price"
})
public class Order {

    @XmlElement(required = true)
    protected String customer;
    @XmlElement(required = true)
    protected String status;
    @XmlElement(name = "user_orderid", required = true)
    protected String userOrderid;
    @XmlElement(required = true)
    protected String item;
    @XmlElement(required = true)
    protected BigInteger quantity;
    @XmlElement(required = true)
    protected BigDecimal price;
    @XmlAttribute
    protected Long id;

    ... getters and setters ...

这是数据库索引:

<datastore-indexes>
    <datastore-index kind="order" ancestor="false" source="auto">
        <property name="status" direction="asc"/>
        <property name="createdTime" direction="desc"/>
    </datastore-index>
</datastore-indexes>

更新:已修复。数据应该如下所示,而不是我上面发布的内容 ID /名称createdTime customerName itemName价格数量状态user_orderid
id = 5760616295825408 2013-10-12 19:25:13.098000 joe Nexus 5 349.00 1待定12

3 个答案:

答案 0 :(得分:3)

您的数据中的几个字段周围都有引号,因此它与您的查询不匹配。清理数据,你应该好好去。

答案 1 :(得分:0)

您可以将status设置为indexed=FalseTextProperty(暗示未编入索引)。 请在此处发布模型定义,以便我们提供更多详细信息来回答您的问题!

答案 2 :(得分:-1)

可能是'status'是一个未记录的保留字吗?

这可以解释这种行为。