Ситуация: У меня есть несколько документов одного и того же набора (счет), каждый из которых имеет атрибут типа array (string) с именем uniquestrings.
Проблема: Каждая запись в uniquestrings должна быть уникальной по всем документам в mongodb. Похоже, что MongoDB/Mongoose не предлагает такой проверки (ни addToSet¹, ни index: {unique: true} ² решить проблему). Есть ли шаблон для реструктуризации моей схемы документов, чтобы убедиться, что сам mongodb может проверить его? В настоящий момент программное обеспечение проверяет его перед обновлением документа.
например.
account {
_id: 111,
uniquestrings: ["a", "b", "c"]
}
account {
_id: 222,
uniquestrings: ["d", "e", "f"]
}
например. предотвратите account(222).uniquestrings.push("a");
, выбросив дублирующую ошибку из mongo.
¹ Уникальности в массиве недостаточно. ² Каждый элемент массива должен быть уникальным в коллекции
Update1:
Другие примеры. Затронутая запись схемы выглядит следующим образом:
var Account = new Schema({
...
uniquestrings: [{type: String, index: {unique: true}}]
...
});
Теперь при создании 4 учетных документов. Я хочу, чтобы только 1 и 2 были в порядке, и отдых должен потерпеть неудачу.
var accountModel1 = new Account.Model({uniquestrings: ["a", "b"]});
accountModel1.save(); // OK
var accountModel2 = new Account.Model({uniquestrings: ["c", "d"]});
accountModel2.save(); // OK
var accountModel3 = new Account.Model({uniquestrings: ["c", "d"]});
accountModel3.save(); // FAIL => Not unique, so far so good
var accountModel4 = new Account.Model({uniquestrings: ["X", "d"]});
accountModel4.save(); // OK => But i Want this to faile because "d" is alreay in use.