繁体   English   中英

如何在NoSQL中查询关系?

[英]How to query relations in NoSQL?

我决定将我的数据库从MySQL移到Mongo,因为大多数时候,我的数据不是结构化的。 它让我在传统的SQL中过于复杂。

我目前面临的一个问题是如何在NoSQL中使用传统的SQL关系模型。 我已多次读过NoSQL不是为处理关系而设计的。 我是否需要将它们作为数组添加到具有关系的文档中?

这种情况让我陷入困境。 在SQL中,我有一个单独的oauth访问令牌表,其中包含user_id,client_id,access_token,expires作为其属性。 用户和access_token之间是1-N关系。 我如何在NoSQL中做到这一点? 通过添加数组字段oauth_tokens? 如果我这样做,我如何在数组中搜索令牌? 我该如何查询

search for a document where the _id is $user_id and there is an element
with $token in the access_tokens array?

这里至少有两个选项:

  1. 您可以将oauth_tokens存储在单独的集合中(就像在其他表中的MySQL中一样),并添加到oauth_token字段,例如user_id,其中包含来自users集合的当前用户的_id值。 为指定用户查找令牌只是在oauth_tokens集合中搜索具有给定user_id的文档。 请记住,Mongo不会以任何方式“支持”这种关系 - 数据库不会帮助您保持字段user_id的值正确。

例:

db.tokens.insert({ client_id : "1", user_id : "20", access_token : "1234567890", expires : new Date(2014-12-31)})

查询:

db.tokens.find({user_id:"20"})
  1. 就像你写的:你可以在用户文档中嵌入标记并查询现有标记。 检查文档以了解如何查询嵌入式文档: 链接

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM