在MongoDB doc中存储辅助文档

时间:2011-11-21 07:34:15

标签: mongodb documents

假设User2具有这些数据对象,它们作为对象数组存储在User2.objects中。

User2:{objects:[{object1},{object2},{object3}]} 

如果User2需要其他任何人查询此数据,则User1需要任何与其相关的对象。那么它应该被分解成MongoDB数据库中自己的集合吗?

因为说User1希望找到像这样的每个对象。他们需要引用他们创建数据的所有User2,然后查看每个用户中的每个对象,并返回他们需要的对象。

我应该将这些对象分解为自己的集合吗?然后我可以只索引用户ID,每个用户只需查询一次他们自己的id。

很抱歉,如果这个问题令我感到困惑,我有点失落。

1 个答案:

答案 0 :(得分:5)

似乎Mongo文档结构与使用MongoDB认证之间可能存在一些混淆。

有关如何为Mongo数据库设置用户身份验证的文档如下: http://www.mongodb.org/display/DOCS/Security+and+Authentication

如果User2需要对User1创建的集合运行查询,则User2必须拥有该集合所在的数据库帐户,并且必须经过适当的身份验证。

提供的示例文档也有点令人困惑。最好使用在所有文档中都相同的键名。例如:

{userName:"user1", name:"Marc"},
{userName:"user2", name:"Jeff"},
{userName:"user3", name:"Steve"}

优于

{user1:"Marc"},
{user2:"Jeff"},
{user3:"Steve"}

在第二个示例中,必须知道用户名(user1,user2等)才能找到用户的名称。 MongoDB在查询中不支持通配符。

以下文档结构更可取:

{
user: "User2", 
objects:[object1,object2,object3]
},
{
user: "User1", 
objects:[object1,object2,object3]
}

可以使用以下查询检索user1创建的所有对象:

> db.<your collection name>.find({user: "User1"}, {objects:1})

有关MongoDB文档结构的更多信息,建议您阅读以下内容:

http://www.mongodb.org/display/DOCS/Schema+Design - 对MongoDB中数据存储方式的精彩介绍,包括示例文档,最佳实践和索引简介。

希望上面的内容能够帮助您确定集合架构,创建用户和设置权限。身份验证是MongoDB更高级的功能之一,因此我首先要着重于构建高效的架构并正确组织数据,然后再担心身份验证。

如果您对这些主题或与MongoDB相关的任何其他内容有任何其他疑问,社区随时为您提供帮助!祝你好运!