如何在NoSQL中查询关系?

Gas*_*sim 5 mongodb 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?
Run Code Online (Sandbox Code Playgroud)

Pio*_*iec 2

您在这里至少有 2 个选择:

  1. 您可以将 oauth_tokens 存储在单独的集合中(就像在 MySQL 中的其他表中一样),并添加到 oauth_token 字段,例如包含用户集合中当前用户的 _id 值的 user_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)})
Run Code Online (Sandbox Code Playgroud)

询问:

db.tokens.find({user_id:"20"})
Run Code Online (Sandbox Code Playgroud)
  1. 就像您所写的那样:您可以在用户文档中嵌入令牌并查询现有令牌。检查文档以了解如何查询嵌入文档:链接