Mongodb-如何创建允许空值和其他指定值重复的唯一索引

Mongodb-如何创建允许空值和其他指定值重复的唯一索引,mongodb,indexing,Mongodb,Indexing,在我的文档JSON结构中有一个“header.header.message id”,我为其创建了一个索引,在db.archives.getIndexes()的输出中类似于此: 我需要创建一个索引,允许null和其他指定值的重复。 例如,当“header.header.message id”为空时,以及当它等于“#1/1”(在我的文档中经常出现)时,我希望接受。除此之外,应拒绝所有副本。 有人能帮我吗?好的,我在这个网站上没有得到答案,但我最终找到了答案。 索引必须以以下方式定义,以确保它只接受键

在我的文档JSON结构中有一个“header.header.message id”,我为其创建了一个索引,在db.archives.getIndexes()的输出中类似于此:

我需要创建一个索引,允许null和其他指定值的重复。 例如,当“header.header.message id”为空时,以及当它等于“#1/1”(在我的文档中经常出现)时,我希望接受。除此之外,应拒绝所有副本。
有人能帮我吗?

好的,我在这个网站上没有得到答案,但我最终找到了答案。 索引必须以以下方式定义,以确保它只接受键“header.header.message id”的唯一值,除了空值和等于“#1/1”的值之外


我已经测试过了,它可以正常工作。

好的,在这个网站上没有得到答案,但我最终找到了答案。 索引必须以以下方式定义,以确保它只接受键“header.header.message id”的唯一值,除了空值和等于“#1/1”的值之外


我已经测试过了,它可以正常工作。

?我尝试了
db.meow.createIndex({“item”:1},{“unique”:true,partialFilterExpression:{item:{$ne:null,$ne:“#1/1”}}}})
但这是不可能的,
$ne
是不允许的。我想知道$gt是否会起作用希望其他人会帮助,我看不到tbhMinsky的方法,我已经找到了答案,见下文。我尝试了
db.meow.createIndex({“item”:1},{“unique”:true,partialFilterExpression:{item:{$ne:null,$ne:{1/1}}}})
但这是不可能的,
$ne
不允许有某种方法。我想知道$gt是否有效希望其他人会帮助,我不知道tbhMinsky有什么办法,我已经找到了答案,请参见下文。很高兴知道,但我没有建议这样做的唯一原因是
$gt:“#1/1”
没有意义,除非您实际包含了其他数据。不管怎样……它确实有意义,这个规范说:1。接受独特的价值观;2.除了空值(空的或缺少键header.header.message id);3.除等于“#1/1”的值外。经过测试,完全按照我的需要工作。为什么使用$gt而不是$ne?我想使用$ne(匹配所有不等于指定值的值),但这导致了错误(部分索引中不支持的表达式),因此下一个要尝试的是$gt,它匹配大于指定值的值。基于规范,这并不是一个明显的选择,但它是有效的。还要注意的是,我没有尝试任何匹配数组的运算符,这可能是需要测试的。知道这一点很好,但我不建议这样做的唯一原因是
$gt:“#1/1”
没有意义,除非您实际包含了其他数据。不管怎样……它确实有意义,这个规范说:1。接受独特的价值观;2.除了空值(空的或缺少键header.header.message id);3.除等于“#1/1”的值外。经过测试,完全按照我的需要工作。为什么使用$gt而不是$ne?我想使用$ne(匹配所有不等于指定值的值),但这导致了错误(部分索引中不支持的表达式),因此下一个要尝试的是$gt,它匹配大于指定值的值。基于规范,这并不是一个明显的选择,但它是有效的。还要注意的是,我没有尝试任何匹配数组的操作符,这可能需要测试。
{
"key": {
  "header.header.message-id": 1
},
"name": "header.header.message-id_index",
"v": 2,
"background": false
} 
  {
    "key": {
      "header.header.message-id": 1
    },
    "name": "header.header.message-id_index",
    "partialFilterExpression": {
      "header.header.message-id": {
        "$exists": true,
        "$gt": "#1/1"
      }
    },
    "unique": true
  }