假设我们有一个类似于这样的文档集合:
{
foo: "Bar",
foos: [1, 2, 3]
}
我想定义一个唯一索引,这样就不能将与此相同的文档插入到数据库中。
db.stuffs.ensureIndex({ foos: 1 }, { unique: true })
看起来会阻止包含任何交集的foos
数组的文档,例如,如果上述文档已经在数据库中,则:
{
foo: "Bar",
foos: [ 1 ]
}
也将被阻止。
> db.stuffs.ensureIndex({ foos: 1 }, { unique: true })
> db.stuffs.insert({ foo: "Bar", foos: [ 1, 2, 3 ]})
> db.stuffs.insert({ foo: "Bar", foos: [ 1 ]})
E11000 duplicate key error index: test.stuffs.$foos_1 dup key: { : 1.0 }
我希望能够插入 [ 1, 2 ], [ 2, 1 ], [ 1, 3 ] 等,但不能插入两个 [ 1, 2 ]。
$addToSet
将数组包含在单个文档中,或者使用不带数组的单独文档。如果您能解释真实的用例,那么就能得到更好的答案。索引无法为您完成此操作。 - Neil Lunn