Я работаю над сайтом, созданным в KeystoneJS, который позволяет пользователям публиковать слова и получать синонимы от других пользователей. Слова представляются как часть фразы или предложения, например "Кошка была [опасно] близка к постукиванию по стеклу".
Модель моего предложения выглядит следующим образом:
Sentence.add({
sentence: { type: Types.Text, required: true, initial: "New Sentence", index: true },
word: { type: Types.Relationship, ref: 'Word', required: true, index: true, unique: true, initial: true },
submitter: { type: Types.Relationship, ref: 'User', required: true, index: true, unique: true, initial: true },
source: { type: Types.Text },
createdAt: { type: Date, default: Date.now }
});
И я попытался сделать модель Word уникальной в соответствии с документами Mongoose:
var Word = new keystone.List('Word', {
map: { name: 'word' },
_id: { from: 'word', path: 'word', unique: true, fixed: false}
});
Word.add({
word: { type: Types.Text, required: true, initial: "New word", index: true }
});
Но если я проверю его, представив два предложения с одним и тем же словом, он просто сделает второй экземпляр этого слова с _id [word] -1, [word] -2 и т.д.
Мне нужно иметь возможность запрашивать все предложения, которые используют определенное слово, поэтому мне действительно нужен один элемент для каждого слова. Но для моей жизни я не могу понять, как сделать поле уникальным.
Возможно, моя проблема связана с тем, когда я добавляю новое слово с маршрута, ответственного за прием запросов AJAX:
var newWord = new Word.model({
word: req.body.word // read from the input box on the home page
});
newWord.save(function(err) {
if (err) {
console.error(err);
}
});
Но я думал, что .save
просто обновит существующее уникальное поле?