Tôi đang làm việc trên một trang web được xây dựng trong KeystoneJS cho phép người dùng đăng các từ và nhận các từ đồng nghĩa được đề xuất từ những người dùng khác. Các từ được gửi như là một phần của cụm từ hoặc câu, như "Con mèo [nguy hiểm] gần gõ cửa kính."Cách tạo các khóa duy nhất trong KeystoneJS
mô hình Câu của tôi trông như thế này:
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 }
});
Và tôi đã cố gắng để làm cho mô hình Lời độc đáo theo tài liệu 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 }
});
Nhưng nếu tôi kiểm tra nó bằng cách gửi hai câu với cùng một từ, nó chỉ tạo một ví dụ thứ hai của từ đó với _id [từ] -1, [từ] -2, v.v.
Tôi cần có khả năng truy vấn tất cả các câu sử dụng một từ cụ thể, vì vậy tôi thực sự cần một mục cho mỗi từ. Nhưng đối với cuộc sống của tôi, tôi không thể tìm ra cách làm cho một lĩnh vực độc đáo.
Có thể vấn đề của tôi là với khi tôi thêm một Word mới từ con đường chịu trách nhiệm về việc chấp nhận yêu cầu 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);
}
});
Nhưng tôi nghĩ .save
sẽ chỉ cập nhật một lĩnh vực độc đáo hiện tại?
tôi vẫn nhận được nhiều các mục nhập cho cùng một từ khi tôi xem trực tiếp cơ sở dữ liệu Mongo. Nếu tôi thêm cùng một từ hai lần, '_id' sẽ trở thành" [word] -1 ", ngay cả với' {unique: true} 'trong mô hình. Tôi cũng thấy lỗi này mặc dù: '{[CastError: Truyền tới ObjectId không thành công cho giá trị" {word: 'sleek'} "tại đường dẫn" word "]' –
Thực ra, 'Cast to ObjectId' không liên quan, nhưng thậm chí nếu tôi sử dụng ObjectId mặc định cho _id, thiết lập 'unique: true' vẫn tạo một mục mới –