【问题标题】:How to query relations in NoSQL?如何在 NoSQL 中查询关系?
【发布时间】:2014-09-19 07:52:21
【问题描述】:

我决定将我的数据库从 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?

【问题讨论】:

  • 您可以在 mongodb 中使用 map-reduce 概念与两个不同的集合形成关系。
  • @KumarKailash 可能你做不到。 MongoDB 一次处理 一个 集合,它“故意”这样做是有原因的。这个问题需要提供一个具体的点和示例问题来解决,否则它基本上“太宽泛”了。因此,如果作者想要一个真实的答案,那么建议实际描述该问题而不是要求概括。
  • 在我问这个问题之前,我对 mongo 中的“关系”的了解几乎为零;在谷歌搜索和尝试和测试之后,我有了一点知识。对于那个很抱歉。我得到了我现在需要的东西,但我很确定在不久的将来我会在这里问一个类似的问题,届时我会非常具体。

标签: mongodb nosql


【解决方案1】:

这里至少有 2 个选项:

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

【讨论】:

  • 也许展示了一些方法来做任何一种方法而不是简单的段落,否则可能只是一个链接?
  • 抱歉提出老话题。所以。如果我想找到具有特定令牌的用户,我可以这样做db.tokens.find({access_token:"1234567890"})?
  • @Kurotsuki 是的,这是要使用的查询。
猜你喜欢
  • 2020-10-15
  • 1970-01-01
  • 2019-08-23
  • 1970-01-01
  • 2011-05-06
  • 2021-09-22
  • 1970-01-01
  • 1970-01-01
  • 2020-11-24
相关资源
最近更新 更多