我有一个复合唯一索引
db.collection("sheets").createIndex(
{
'cells.x': 1,
'cells.y': 1
},
{ unique: true }
);
所以我可以拥有这样的文件:
{
_id: "xxx",
name: "sheet 1",
cells: [{x:0, y:1, sheet_id: "xxx"}, {x:1, y:1, sheet_id: "xxx"}]
}
但是当我创建带有空“单元格”数组字段的 2 个文档时, 我收到此错误:
(node:23492) UnhandledPromiseRejectionWarning: MongoError: E11000 duplicate key error collection: test.sheets index: cells.x_1_cells.y_1_cells.sheet_id_1 dup key: { cells.x: null, cells.y: null, cells.sheet_id: null }
注意:
重复键:{cells.x:null,cells.y:null,cells.sheet_id:null}
当然,我不知道数组中有一个{cells.x:null,cells.y:null,cells.sheet_id:null}。它是空的...
如果一个文档中的“单元格”数组不为空,则我可以使用空的“单元格”创建第二个文档。
如何解决这个问题,并且有多个空的“单元”数组?
答案 0 :(得分:0)
您可以创建一个Partial Index
,该索引将仅索引与其查询匹配的文档。在这种情况下,仅匹配具有“ cell.x”的文档-有效地说出具有某些元素的文档。
db.sheets.createIndex({ "cells.x": 1, "cells.y": 1 },
{ unique: true, partialFilterExpression: { "cells.x": { $exists: true } } })