【问题标题】:MongoDB unique index across multiple subdocuments跨多个子文档的 MongoDB 唯一索引
【发布时间】:2016-03-15 03:13:51
【问题描述】:

我有这个文档结构,属性“名称”在所有文档中必须是唯一的,如上所示:

{ 
    "_id" : ObjectId("56686341d6389c004c689d5d"), 
    "Bosses" : {
        "B1" : {
            "_id" : NumberInt(1), 
            "Name" : "John"
        },
        "B2" : {
            "_id" : NumberInt(1), 
            "Name" : "Mary"
        }
    }
}

{ 
    "_id" : ObjectId("56686341d6389c004c689d6f"), 
    "Bosses" : {
        "B1" : {
            "_id" : NumberInt(1), 
            "Name" : "Mary" // should throw an error
        }
    }
}

可以用这种结构创建唯一索引吗?

【问题讨论】:

标签: mongodb unique-index subdocument


【解决方案1】:

是的,您必须在 Bosses.Name 上创建唯一索引。但是,您将不得不稍微更改您的架构。 Bosses 应该是一个数组:

{ 
    "_id" : ObjectId("56686341d6389c004c689d6f"), 
    "Bosses" : [
        {
            "_id" : NumberInt(1), 
            "Name" : "Mary" // should throw an error
        }
    }
}

如果你真的需要B1,我建议你将它添加到Bosses对象中:“代码”:“B1”。但这可能不是必需的,因为您可以通过 ...find({ "Bosses.0.Name" }) 访问数组中的索引

【讨论】:

  • 由于jira.mongodb.org/browse/SERVER-3326,我真的需要保留原始结构。我知道这不是最好的解决方案,但它避免了在更新老板时两次调用数据库。
  • 你能解释一下你的 upsert 的问题吗?也许社区可以帮助您以不同的方式构建您的 upsert。
猜你喜欢
  • 2016-12-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-16
  • 2014-02-23
  • 2016-01-18
  • 1970-01-01
相关资源
最近更新 更多