数组字段中对象字段的MongoDB部分唯一索引

时间:2018-07-18 13:49:43

标签: mongodb indexing

让我们说我有一个集合,其对象具有这样的结构:

{
  "a": [
    {"name": "foo", "meh": "whatever"}, 
    {"name": "bar", "meh": "hem"}
  ],
  "other_stuff": { }
}

此集合中的对象可能具有“ a”字段。我想对数据库强制执行约束,以便 if 对象具有“ a”字段,该“ a”字段中包含的对象中的“ name”字段均不重复在整个收藏集中

例如,如果上面的对象已经在集合中,则以下对象将被标记为违反约束条件:

{
  "a": [
    {"name": "bar", "meh": "meh meh"}
  ],
  "other_stuff": { }
}

此外,无论集合中是否已有其他文档,以下对象都将被标记为约束违例:

{
  "a": [
    {"name": "boo", "meh": "blub"}, 
    {"name": "boo", "meh": "glub"}
  ],
  "other_stuff": { }
}

是否可以为MongoDB指定局部唯一索引?如果Mongo 3.2、3.4、3.6和4.0之间有所不同,也很高兴知道这一点-我不在乎3.2之前的版本。

我当时想是为了防止在文档之间重复(可能是由于被动阅读器的Javscript [] > '' === falseundefined > '' === false['anything'] > '' === true),

db.MyCollection.createIndex(
  { "a.name": 1 },
  { 
    "unique": true, 
    "partialFilterExpression": {
      "a": { "$gt": '' }
    }
  }
)

...并且我认为防止文档中重复值的唯一方法是在应用程序逻辑中在对“ a”字段进行操作时强制使用$addToSet运算符

无论哪种情况,我都很高兴得到纠正或证实。

0 个答案:

没有答案