在这篇文章中,我们将带领您了解AppEngine数据存储区不支持运算符OR的全貌,包括不支持储存数据权限的相关情况。同时,我们还将为您介绍有关AppEngine数据存储区:如何使用golang在属性上
在这篇文章中,我们将带领您了解App Engine数据存储区不支持运算符OR的全貌,包括不支持储存数据权限的相关情况。同时,我们还将为您介绍有关App Engine数据存储区:如何使用golang在属性上设置多个值?、Appengine Search API与数据存储区、AppEngine数据存储区:“ ID为…的对象由其他对象管理器管理”、AppEngine:查询数据存储区中包含的记录 值的知识,以帮助您更好地理解这个主题。
本文目录一览:- App Engine数据存储区不支持运算符OR(不支持储存数据权限)
- App Engine数据存储区:如何使用golang在属性上设置多个值?
- Appengine Search API与数据存储区
- AppEngine数据存储区:“ ID为…的对象由其他对象管理器管理”
- AppEngine:查询数据存储区中包含的记录 值
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在属性上设置多个值?
我正在尝试使用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
由如Key
的Post
或最好只是它IntID
。
Appengine Search API与数据存储区
我正在尝试决定是否应针对App引擎关联的Android项目使用App引擎搜索API或数据存储区。Google文档的唯一区别是
…索引搜索最多只能找到10,000个匹配的文档。App Engine数据存储区可能更适合需要检索非常大的结果集的应用程序。
鉴于我已经非常熟悉数据存储区:假设我不需要10,000个结果,有人可以帮我吗?
- 是否有任何优势,利用
Search API
与使用数据存储为我的查询(根据上面的报价,这似乎是合理使用一个 或 其他)?在我的情况下,最终用户必须能够搜索,更新现有条目并创建新实体。例如,如果我的应用程序是一家书店,则用户必须能够添加新书,向现有书添加评论,搜索特定书。 - 我的数据结构是这样的,内容将由最终用户提供。文档与数据存储区实体:更新哪个更便宜?$$等
- 它们能否互相补充:数据存储区和Search API?有什么好处?为什么有人会考虑将两者配对?捕获/成本是多少?
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:查询数据存储区中包含的记录 值
我在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:查询数据存储区中包含的记录 值的相关信息,可以在本站进行搜索。
本文标签: