2015-11-06 46 views
0

我目前正在MongoDB中设计一些东西,我不知道最好的模式是一对多关系。MongoDB一对多,其中很少需要是唯一的

我的用户文档结构是如下:

{ 
    "email": "[email protected]", 
    "gender": "M", 
    "name": "Some Name", 
    "locale": "en_US", 
    "timezone": "UTC +8", 
    "country": "China", 
    "accounts":[ 
     { 
      "platform_id" : NumberLong(1), 
      "id" : "556as1234432bb" 
     }, 
     { 
      "platform_id" : NumberLong(2), 
      "id" : "82378437BA98" 
     }, 
    ], 
} 

我的问题是账目的一部分。每个用户只有很少的人,所以它似乎是嵌入的完美人选。此外,我需要使用这些ID检索整个对象的情况有5%,从这一点我可以使用_id字段。

但是:

  1. 我需要确保该平台+ id为所有用户
  2. 当添加我需要一个用户拥有每个平台_id只有一个ID唯一

问题: 我目前不理解索引和查询的组合,这些将帮助我实现这一点。我如何最好地模拟这个?

回答

0

根据您的要求,上述的描述,因为它的解决方案,你需要创建一个独特的复合指数

只是指如下面提到

db.user.createIndex({ "accounts.platform_id": 1, "accounts.id": 1 }, { unique: true }) 

更详细的说明的例子关于独特的复合指数请参考以下URL中提到的文件

https://docs.mongodb.org/manual/tutorial/create-a-unique-index/

+0

这是否会在整个系列中独一无二?我如何确保问题的第二部分? –

+0

@JeroendeLau唯一索引将在整个集合中创建索引字段的唯一组合 –

+0

@JeroendeLau此答案不解决第二个要求。但是,这应该在应用程序方面处理。把逻辑放在它所属的地方。 ;) –