GVKun编程网logo

App Engine数据存储区不支持运算符OR(不支持储存数据权限)

48

在这篇文章中,我们将带领您了解AppEngine数据存储区不支持运算符OR的全貌,包括不支持储存数据权限的相关情况。同时,我们还将为您介绍有关AppEngine数据存储区:如何使用golang在属性上

在这篇文章中,我们将带领您了解App Engine数据存储区不支持运算符OR的全貌,包括不支持储存数据权限的相关情况。同时,我们还将为您介绍有关App Engine数据存储区:如何使用golang在属性上设置多个值?、Appengine Search API与数据存储区、AppEngine数据存储区:“ ID为…的对象由其他对象管理器管理”、AppEngine:查询数据存储区中包含的记录 值的知识,以帮助您更好地理解这个主题。

本文目录一览:

App Engine数据存储区不支持运算符OR(不支持储存数据权限)

App Engine数据存储区不支持运算符OR(不支持储存数据权限)

我正在尝试在Google数据存储区中查询类似的内容(使用pm-> persistanceManager):

String filters = "(  field == ''value'' ||  field == ''anotherValue'' )";Query query = pm.newQuery(myType.class, filters);

执行时-我回来了: App Engine数据存储区不支持运算符OR

人们对此类查询的最佳体验方法是什么?

任何帮助表示赞赏!

答案1

小编典典

执行多个查询。与其他所有数据库一样,数据存储区也无法有效执行析取。与其他数据库不同,它向用户暴露了这一困难,以明确您的工作效率不高。您唯一的解决方案是执行多个查询-
每个查询一次或-将其合并。

App Engine数据存储区:如何使用golang在属性上设置多个值?

App Engine数据存储区:如何使用golang在属性上设置多个值?

我正在尝试使用Golang在Google的数据存储中为单个属性保存多个值。

我有一个int64,我希望能够存储和检索。从文档中,我可以看到通过实现PropertyLoadSaver
{}接口对此提供了支持。但我似乎无法提出正确的实施方案。

本质上,这就是我要完成的工作:

type Post struct {    Title         string    UpVotes       []int64 `json:"-" xml:"-" datastore:",multiple"`    DownVotes     []int64 `json:"-" xml:"-" datastore:",multiple"`}c := appengine.NewContext(r)p := &Post{    Title: "name"    UpVotes: []int64{23, 45, 67, 89, 10}    DownVotes: []int64{90, 87, 65, 43, 21, 123}}k := datastore.NewIncompleteKey(c, "Post", nil)err := datastore.Put(c, k, p)

但是没有“数据存储:无效的实体类型”错误。

答案1

小编典典

默认情况下,AppEngine支持多值属性,您无需执行任何特殊操作即可使其工作。您不需要实现PropertyLoadSaver接口,也不需要任何特殊的标记值。

如果struct字段是切片类型,则它将自动为多值属性。此代码有效:

type Post struct {    Title         string    UpVotes       []int64    DownVotes     []int64}c := appengine.NewContext(r)p := &Post{    Title: "name",    UpVotes: []int64{23, 45, 67, 89, 10},    DownVotes: []int64{90, 87, 65, 43, 21, 123},}k := datastore.NewIncompleteKey(c, "Post", nil)key, err := datastore.Put(c, k, p)c.Infof("Result: key: %v, err: %v", key, err)

当然,如果您愿意,可以为json和xml指定标签值:

type Post struct {    Title         string    UpVotes       []int64 `json:"-" xml:"-"`    DownVotes     []int64 `json:"-" xml:"-"`}

笔记:

但是请注意,如果索引了多值属性,则该属性不适合存储大量值。这样做将需要许多索引(许多写入操作)才能存储和修改实体,并且可能会达到实体的索引限制(有关更多详细信息,请参见索引限制和爆炸索引)。

因此,例如,您不能使用多值属性存储的上,下投票数Post。对于您应该存储票作为单独/不同实体链接到Post由如KeyPost或最好只是它IntID

Appengine Search API与数据存储区

我正在尝试决定是否应针对App引擎关联的Android项目使用App引擎搜索API或数据存储区。Google文档的唯一区别是

…索引搜索最多只能找到10,000个匹配的文档。App Engine数据存储区可能更适合需要检索非常大的结果集的应用程序。

鉴于我已经非常熟悉数据存储区:假设我不需要10,000个结果,有人可以帮我吗?

  • 是否有任何优势,利用Search API与使用数据存储为我的查询(根据上面的报价,这似乎是合理使用一个 其他)?在我的情况下,最终用户必须能够搜索,更新现有条目并创建新实体。例如,如果我的应用程序是一家书店,则用户必须能够添加新书,向现有书添加评论,搜索特定书。
  • 我的数据结构是这样的,内容将由最终用户提供。文档与数据存储区实体:更新哪个更便宜?$$等
  • 它们能否互相补充:数据存储区和Search API?有什么好处?为什么有人会考虑将两者配对?捕获/成本是多少?

AppEngine数据存储区:“ ID为…的对象由其他对象管理器管理”

AppEngine数据存储区:“ ID为…的对象由其他对象管理器管理”

我正在使用带有Java的Google AppEngine。当我使用某些数据存储功能时,出现一条错误消息:

Object with id "edvaltt.Teacher@64064b" is managed by a different Object Manager

我不知道这意味着什么,如何解决它,或者在哪里可以找到有关此错误的文档。谁能帮我?我使用的代码是:

@PersistenceCapable(identityType = IdentityType.APPLICATION)public class School {@PrimaryKey@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)private String shortname;@Persistentprivate String fullname;@Persistent@Order(extensions = @Extension(vendorName="datanucleus", key="list-ordering", value="code asc"))private List<Teacher> Teachers;...public Teacher FindOrCreateTeacher(String code){    // Can we find the teacher without any database code?    Teacher newTeacher = FindTeacher(code);    if (newTeacher != null)        return newTeacher;    // Create the teacher:    PersistenceManager pm = PMF.get().getPersistenceManager();    Transaction tx = pm.currentTransaction();    try {        tx.begin();        for (Teacher teacher : Teachers) {            if (teacher.getCode() == code) {                tx.rollback();                return teacher;            }        }        newTeacher = new Teacher(code);        Teachers.add(newTeacher);        pm.makePersistent(newTeacher);        pm.makePersistent(Teachers);        tx.commit();    } finally {        tx.commit();    }    return newTeacher;}

我相信“ private List<Teacher> Teachers;”是指“拥有的,一对多”的关系。

答案1

小编典典

一个持久对象只能由一个PersistenceManager“管理”。在DataNucleus中,这由“
ObjectManager”在内部支持。该消息表明您正在尝试将一个PM管理的对象与另一个PM关联。您可以通过打印每个(持久)对象的PM来轻松调试它

JDOHelper.getPersistenceManager(obj);

由于您没有定义消息的来源,因此无法说更多。DataNucleus日志条目将告诉您更多方法。

关闭PM始终是必不可少的事情(除非您希望资源泄漏)

AppEngine:查询数据存储区中包含的记录 值

AppEngine:查询数据存储区中包含的记录 值

我在Google App Engine数据存储区中为数据库模型创建了一个新属性。

旧:

class Logo(db.Model):
  name = db.StringProperty()
  image = db.BlobProperty()

新:

class Logo(db.Model):
  name = db.StringProperty()
  image = db.BlobProperty()
  is_approved = db.BooleanProperty(default=False)

如何查询未设置“ is_approved”值的徽标记录?我试过了

logos.filter("is_approved = ",None)

但这没用。在数据查看器中,新字段值显示为。

我们今天的关于App Engine数据存储区不支持运算符OR不支持储存数据权限的分享就到这里,谢谢您的阅读,如果想了解更多关于App Engine数据存储区:如何使用golang在属性上设置多个值?、Appengine Search API与数据存储区、AppEngine数据存储区:“ ID为…的对象由其他对象管理器管理”、AppEngine:查询数据存储区中包含的记录 值的相关信息,可以在本站进行搜索。

本文标签: