我需要经验丰富的NoSQL工程师有关如何构造数据的建议。
到目前为止,我已将三个表转换为带有示例数据的JSON文档:
{
"session": {
"userId": 99992222,
"token": "jwttoken1191891j1kj1khjjk1hjk1kj1",
"created": "timestamp"
}
}
{
"user": {
"id": 99992222,
"username": "userName",
"avatarUrl": "https://url-xxxx.com",
"lastLogin": "2019-11-23 13:59:48.884549",
"created": "2019-11-23 13:59:48.884549",
"modified": "2019-11-23 13:59:48.884549",
"visits": 1,
"profile": true,
"basketDetail": { // I get this data from a third party API
"response": {
"product_count": 2,
"products": [
{
"product_id": 111,
"usageInMinutes_recent": 0,
"usageInMinutes": 0,
"usageInMinutes_windows": 0,
"usageInMinutes_mac": 0,
"usageInMinutes_linux": 0
},
{
"product_id": 222, // no recent usage here
"usageInMinutes": 0,
"usageInMinutes_windows": 0,
"usageInMinutes_mac": 0,
"usageInMinutes_linux": 0
}
]
}
}
}
}
{
"visitor": {
"id": 999922221,
"created": "2019-11-23 13:59:48.884549"
}
}
我的问题:
对嵌套对象basketDetail
怎么办?它在哪里好还是应该定义自己的收藏集?我希望查询
baskedDetail
对象。 如果我将集合user
与查询中的basketDetail
分开,该如何连接?
感谢您的建议!
- session.userId,user.id,visitor.id都可以表示同一用户。 Firestore与SQL中的外键等效是什么?如何在查询中连接/加入这三个集合?
[很遗憾,Firestore中没有JOIN
子句。 Firestore中的查询很浅,只能从运行查询的集合中获取元素。除非您使用collection group query,否则无法在单个查询中从两个集合中获取文档,但事实并非如此,因为项目中的集合名称不同。
如果您有三个集合,则需要三个单独的查询。您不可能一口气做到这一点。
- 如何处理嵌套对象basketDetail?在哪里好还是应该定义自己的收藏集?
关于可以放入文档中的数据量有一些限制。根据有关usage and limits的官方文档:
文档的最大大小:1 MiB(1,048,576字节)
如您所见,单个文档中的数据总数限制为1 MiB。因此,如果您认为嵌套对象basketDetail
可以保持在此限制内,则可以使用该架构,否则,请将其添加到子集合中。除此之外,所有这些操作都可以在Firestore中进行。如果您在实施它们时遇到困难,请提出另一个问题,以便我们进行研究。
如果我将集合用户与查询中的basketDetail连接起来,怎么办?
您无法连接/加入两个收藏夹。如果在子集合中分离basketDetail
,则需要两个查询。