Схема индекса индекса и индекс:
const schema: Mongoose.SchemaDefinition = {
field_name: { type: String, required: true },
mask: { type: String, required: true },
value: { type: String, required: true },
register: { type: Mongoose.Schema.Types.ObjectId, ref: 'register' }
};
const indexFields = {
field_name: 1,
mask: 1,
regsiter: 1,
value: 1
};
export const RegisterFieldsSchema = new Mongoose
.Schema(schema, { timestamps: true })
.index(indexFields, {unique: true});
И в коллекции уже есть записи с такими же field
, mask
и value
, как у следующей записи, но ни одна запись не содержит такой же register
.
Когда я пытаюсь вставить документ:
db.getCollection('registerfields')
.insert({
"field_name":"ARM_SMMU_CBn_PMEVTYPER2_0_NSU",
"mask":"0x10000000",
"register":ObjectId("5ae2639ffc61a6c8dbb332a5"),
"value":"0x00000000",
});
база данных возвращает:
grdb-dev.registerfields index:
field_name_1_mask_1_regsiter_1_value_1 dup key:
{
: "ARM_SMMU_CBn_PMEVTYPER2_0_NSU",
: "0x10000000",
: null,
: "0x00000000"
}
Согласно нескольким другим ответам, это может быть вызвано тем, что в коллекции уже отсутствует свойство register
. Поэтому я проверил, так ли это:
db.getCollection('registerfields')
.find({"register": {$exists: false}})
результат: Fetched 0 record(s) in 6ms
Я также запускаю приведенный выше запрос, чтобы проверить, содержат ли все документы field_name
, mask
и value
. Получил 0 записей за все
Кто-нибудь знает, почему дубликат ключа имеет значение null для регистра?