如何在NoSQL中查询关系?

时间:2014-09-19 07:52:22

标签: 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?

1 个答案:

答案 0 :(得分:2)

这里至少有两个选项:

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

    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. 就像您写的:您可以在用户文档中嵌入令牌并查询现有令牌。检查文档以了解如何查询嵌入式文档:link