我正在使用后端编写多个实体ndb.put_multi(list_of_entities).
我遇到的问题是,如果我进行查询,那么我就没有结果.如果我将睡眠定时器放置例如1秒,我可以读取我刚写的实体.
例如:
class Picture(ndb.Expando):
pass
class Favourite(ndb.Expando):
user_id = ndb.StringProperty(required=True)
pass
#...make lists with Picture and Favourite kinds
entities = favourites
entities[1:1] = pictures
ndb.put_multi(entities)
favourites = Favourite.query().filter(Favourite.user_id == user_id).fetch(99999, keys_only=True)
logging.info(len(favourites)) #returns 0 in dev_appserver why?
Run Code Online (Sandbox Code Playgroud)
首先假设问题与缓存有关.但是:
高级注释:这些方法与上下文和缓存正确交互; 它们不直接对应于特定的RPC调用.
阅读NDB缓存
上下文缓存
上下文缓存仅在单个传入HTTP请求的持续时间内持续存在,并且仅对处理该请求的代码"可见".它很快; 这个缓存存在于内存中.当NDB函数写入数据存储区时,它还会写入上下文缓存区.当NDB函数读取实体时,它首先检查上下文缓存.如果在那里找到实体,则不会发生数据存储交互.
查询不会在任何缓存中查找值.但是,如果缓存策略这样说(但从不对Memcache),查询结果将写回到上下文缓存中.
嗯,我迷失在这里.一切似乎都没问题.即使从控制台查询我得到正确的总和,但从不在同一个处理程序,无论什么功能等.
我唯一注意到的是,当等待时,time.sleep(1)我得到了正确的结果.这与ndb.put_multi可能无法同步完成的事实有关.如此迷茫....
Twitter列表不起作用?
我的客户已经列出了他想要显示推文的人.
列表可以在这里查看:https://twitter.com/Leidsverzet/top
它包含5个人.
嵌入工作正常,但我遇到了一些非常奇怪的事情:并非显示这5个人的所有推文!
为了进一步测试我做了一个[单人测试列表]只有一个人来测试.该列表正常工作,但它不显示该用户的回复.
我在这里理解错了吗?推特列表是不是像团体一样,你可以把人们像家人或教师联系,只看他们的时间表?
关于我为什么不使用列表的一个小页脚说明是因为twitter搜索插件也没有正常工作,所以我没有使用搜索查询,而是相信列表可以解决这个问题,但显然不是.或者Twitter搜索提要和列表不好或者我在这里迷路了.
现在我们在 firestore 上有了集合组查询!伟大的。
但是由于一些规则,如何通过Document ID查询集合组呢?
我试过:
return this.afs.collectionGroup('tokens', (ref) => {
return ref.where(firestore.FieldPath.documentId(), '==', `${this.afAuth.auth.currentUser.uid}`)
}).valueChanges();
Run Code Online (Sandbox Code Playgroud)
但我得到:
Invalid third parameter to Query.where(). When querying a collection group by FieldPath.documentId(), the value provided must result in a valid document path, but 'JKq2AFqGkkSLHsIVaXz4l3wwmfh1' is not because it has an odd number of segments (1).
Run Code Online (Sandbox Code Playgroud)
我也尝试过:
return this.afs.collectionGroup('tokens', (ref) => {
return ref.where(firestore.FieldPath.documentId(), '==', `/users/JKq2AFqGkkSLHsIVaXz4l3wwmfh1`)
}).valueChanges();
Run Code Online (Sandbox Code Playgroud)
但后来我得到 0 个结果
我的代币集合文档 ID 基于我的/users/{userID}
我收集令牌的规则是:
match /{path=**}/tokens/{userID} {
allow read, write, create, update, delete: …Run Code Online (Sandbox Code Playgroud) 为什么此查询user_id在profile表中不存在列时删除所有用户?
初始查询:
DELETE FROM users
WHERE user_id IN (
SELECT user_id FROM profile
)
AND user_id != 35
AND user_id != 6;
Run Code Online (Sandbox Code Playgroud)
更具体.
IN语句查询返回:
SELECT user_id FROM profile;
ERROR: column "user_id" does not exist
LINE 1: SELECT user_id FROM profile;
Run Code Online (Sandbox Code Playgroud)
运行初始查询返回
DELETE 100
为什么会这样?
它不应该在出错时停止执行或返回false或null吗?
运行PostgreSQL Server 9.0
抱歉,我已经多次以不同的方式问过这个问题,例如:
但是,没有一个答案能真正说明解决方案或可以理解。
我也浏览了很多教程,例如:
详细说明:
所以这是我到目前为止所做的
let query = ref.orderBy(orderBy, asc ? 'asc' : 'desc').limit(limit);
if (startAfter) {
// Thiis works as it should
query = query.startAfter(startAfter);
}
if (endBefore) {
// This here does not work or give the correct results. I get the first page.
query = query.endBefore(endBefore);
}
return query;
Run Code Online (Sandbox Code Playgroud)
所以:
query = query.startAfter(startAfter); 可以正常工作。
然而:
query = query.endBefore(endBefore) 在该文件之前没有结束,我认为它已经达到了极限。
我有这些规则:
match /suuntoAppAccessTokens/{userName} {
allow create: if request.auth.uid != null && request.auth.token.firebase.sign_in_provider != 'anonymous';
match /tokens/{userID} {
allow read, write, create, update, delete: if request.auth.uid == userID && request.auth.token.firebase.sign_in_provider != 'anonymous';
}
}
match /{path=**}/tokens/{userID} {
allow read, write, create, update, delete: if request.auth.uid == userID;
}
Run Code Online (Sandbox Code Playgroud)
这意味着对于/suuntoAppAccessTokens/dimitrioskanellopoulos/tokens/{userID}当前用户应该具有访问权限的路径。
但是,当我像这样查询集合组时:
return this.afs.collectionGroup('tokens').snapshotChanges();
Run Code Online (Sandbox Code Playgroud)
我收到权限错误。
直接获取 tokes/{userID} 下的文档按预期工作。
我该怎么做才能让当前用户可以运行 collectionGroup 查询并根据我的规则获取他被允许获取的项目?
在 javascript 中,我从一个数组中创建一个 blob,如下所示:
const a = new Blob([[1,2,3]]);
Run Code Online (Sandbox Code Playgroud)
当我尝试保存这个 blob 时:
this.afs.collection('events').doc(event.getID()).set({data: new Blob([[1,2,3]])}).then((some) => {
debugger;
})
Run Code Online (Sandbox Code Playgroud)
我收到一个错误:
DocumentReference.set() 使用无效数据调用。不支持的字段值:自定义 Blob 对象(在字段数据中找到)
我应该怎么做才能通过 JS 将 blob 保存到 Firestore?
我在firebase上的一项云功能退出,错误代码为16。
我试图谷歌,找出什么代码,但根本没有运气。
Error: Process exited with code 16
at process.on.code (/srv/node_modules/@google-cloud/functions-framework/build/src/invoker.js:393:29)
at process.emit (events.js:189:13)
at process.EventEmitter.emit (domain.js:441:20)
at process.exit (internal/process/per_thread.js:168:15)
at logAndSendError (/srv/node_modules/@google-cloud/functions-framework/build/src/invoker.js:184:9)
at process.on.err (/srv/node_modules/@google-cloud/functions-framework/build/src/invoker.js:390:13)
at process.emit (events.js:189:13)
at process.EventEmitter.emit (domain.js:441:20)
at emitPromiseRejectionWarnings (internal/process/promises.js:119:20)
at process._tickCallback (internal/process/next_tick.js:69:34)
Run Code Online (Sandbox Code Playgroud)
在哪里可以找到报告的错误代码,以便我理解为什么我的函数退出?
升级到 Angular 9 后,我的一些服务扩展的抽象类会自动使用@injectableAngular 9 迁移指南中所写的装饰。
我的应用程序上的一切正常。
但是我不明白为什么抽象类必须被装饰,因为扩展它们的具体类确实有@injectable装饰器。
我还阅读了这个问题Angular library module injection service with abstract class并建议@injectable从抽象中删除。
那么我应该删除装饰器吗?
这只是将装饰器添加到我的摘要中的 Angular“错误”吗?
此外,我注意到@directive装饰器已添加到用于实现组件的其他抽象类中。
我有兴趣知道 Firestore 批量写入的最大大小是否为 10MB(即最大 API 请求大小),或者每个文档(例如 1MB 最多 500MB)。或者这并不重要?
firebase ×6
angular ×2
javascript ×2
angular9 ×1
database ×1
html ×1
pagination ×1
postgresql ×1
python ×1
sql ×1
twitter ×1
typescript ×1
widget ×1