Node.js Mongoose:任意组合中字段对的唯一索引

Node.js Mongoose:任意组合中字段对的唯一索引,node.js,mongodb,indexing,mongoose,unique,Node.js,Mongodb,Indexing,Mongoose,Unique,多个字段的唯一性通常意味着您不能拥有某些字段的相同组合的文档,例如name1和name2。因此,它将不允许存在两个都具有{name1:Joe',name2:Bob'}的文档 这仍然允许文档在切换了name1和name2时同时存在,例如{name1:'Bob',name2:'Joe'}和{name1:'Joe',name2:'Bob'} 有没有一种方法可以创建一个唯一的索引,而不允许同时使用这两种索引?(如果{name1:'Bob',name2:'Joe'}存在,则既不能插入{name1:'Bob

多个字段的唯一性通常意味着您不能拥有某些字段的相同组合的文档,例如
name1
name2
。因此,它将不允许存在两个都具有
{name1:Joe',name2:Bob'}
的文档

这仍然允许文档在切换了
name1
name2
时同时存在,例如
{name1:'Bob',name2:'Joe'}
{name1:'Joe',name2:'Bob'}


有没有一种方法可以创建一个唯一的索引,而不允许同时使用这两种索引?(如果
{name1:'Bob',name2:'Joe'}
存在,则既不能插入
{name1:'Bob',name2:'Joe'}
也不能插入
{name1:'Joe',name2:'Bob'}

它的工作方式与您应该已经得出的结论不同。如果您在“组合”中需要它,那么“数组”将是比单个键更好的选择。或者基本上是合并成一个属性的任何东西。带有“unique”的“复合”索引实际上仍然是“在每个属性上都是唯一的”,而不是“组合”上。当然,带有“数组”的catch将是永远只能有一个
“Bob”
,带有“复合字符串”的catch是
Bob#Joe
仍然不同于
Joe#Bob
。所以这并不是你能用“索引”解决的问题。您可以在“upsert”上使用
$或
条件在任一顺序上进行匹配,并仅在
$setOnInsert
中包装任何“插入”逻辑,但您的整个案例并不清楚在“插入”或“匹配”上要做什么。但是一般来说,upserts“应该”是处理这个问题的方法,而不仅仅是索引。哦,我没有意识到“每个属性上的唯一性”是什么。非常感谢。我编辑了这个问题以消除那个错误。