Sto lavorando a un sito creato in KeystoneJS che consente agli utenti di pubblicare parole e ottenere sinonimi suggeriti da altri utenti. Le parole sono presentate come parte di una frase o frase, come "Il gatto era [pericolosamente] vicino a bussare sul vetro".Come creare chiavi univoche in KeystoneJS
Il mio modello Frase assomiglia a questo:
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 }
});
e ho cercato di fare il modello di Word unica in base alla documentazione 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 }
});
Ma se io provarlo presentando due frasi con il stessa parola, fa solo una seconda istanza di quella parola con _id [parola] -1, [parola] -2, ecc.
Devo essere in grado di interrogare tutte le frasi che usano una particolare parola, quindi iodavvero bisogno di un oggetto per parola Ma per la vita di me, non riesco a capire come rendere un campo unico.
E 'possibile il mio problema è con quando aggiungo una nuova parola dal percorso responsabile di accettare le richieste 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);
}
});
Ma ho pensato .save
sarebbe solo aggiornare un campo univoco esistente?
sto ancora ricevendo multipla voci per la stessa parola quando guardo direttamente il database di Mongo. Se aggiungo la stessa parola due volte, '_id' diventa" [parola] -1 ", anche con' {unique: true} 'nel modello. Sto anche vedendo questo errore: '{[CastError: Cast to ObjectId failed for value" {word: 'sleek'} "al percorso" word "]' –
In realtà, 'Cast to ObjectId' non è correlato, ma anche se uso l'ObjectId predefinito per _id, l'impostazione 'unique: true' fa ancora una nuova voce –