我决定将数据库从MySQL迁移到Mongo,因为在大多数情况下,我的数据不是结构化的。而且它给了我在传统SQL中过于复杂的可能性。

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

这是使我陷入困境的一种情况。在SQL中,我有一个单独的表用于oauth访问 token ,该表具有user_id,client_id,access_token的属性已过期。用户和access_token之间是1-N关系。我将如何在NoSQL中做到这一点?通过添加数组字段oauth_tokens?如果这样做,如何在数组中搜索 token ?我如何查询

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

最佳答案

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

  • 您可以将oauth_tokens存储在单独的集合中(就像在其他表中的MySQL中一样),并添加到oauth_token字段(如user_id),其中包含用户集合中该当前用户的_id值。查找指定用户的 token 只是在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"})
    
  • 就像您写的一样:您可以将 token 嵌入用户文档中并查询现有 token 。检查文档以查看如何查询嵌入式文档:link
  • 关于mongodb - 如何在NoSQL中查询关系?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25928951/

    10-16 20:08