Có lẽ đã đến lúc, có lẽ đó là tôi chìm đắm trong tài liệu thưa thớt và không thể che giấu khái niệm cập nhật trong Mongoose :)
Đây là thỏa thuận:
Tôi có một lược đồ và mô hình liên hệ (thuộc tính rút gọn):
var mongoose = require('mongoose'),
Schema = mongoose.Schema;
var mongooseTypes = require("mongoose-types"),
useTimestamps = mongooseTypes.useTimestamps;
var ContactSchema = new Schema({
phone: {
type: String,
index: {
unique: true,
dropDups: true
}
},
status: {
type: String,
lowercase: true,
trim: true,
default: 'on'
}
});
ContactSchema.plugin(useTimestamps);
var Contact = mongoose.model('Contact', ContactSchema);
Tôi nhận được yêu cầu từ khách hàng, chứa các trường tôi cần và sử dụng mô hình của tôi như vậy:
mongoose.connect(connectionString);
var contact = new Contact({
phone: request.phone,
status: request.status
});
Và bây giờ chúng ta đạt được vấn đề:
- Nếu tôi gọi,
contact.save(function(err){...})
tôi sẽ nhận được lỗi nếu liên hệ có cùng số điện thoại đã tồn tại (như mong đợi - duy nhất) - Tôi không thể gọi
update()
liên lạc, vì phương pháp đó không tồn tại trên một tài liệu - Nếu tôi gọi cập nhật trên mô hình:
Contact.update({phone:request.phone}, contact, {upsert: true}, function(err{...})
Tôi nhận được một vòng lặp vô hạn của một số loại, vì việc triển khai cập nhật Mongoose rõ ràng không muốn một đối tượng là tham số thứ hai. - Nếu tôi làm tương tự, nhưng trong tham số thứ hai, tôi chuyển một mảng kết hợp của các thuộc tính yêu cầu,
{status: request.status, phone: request.phone ...}
nó hoạt động - nhưng sau đó tôi không có tham chiếu đến liên hệ cụ thể và không thể tìm ra thuộc tínhcreatedAt
vàupdatedAt
thuộc tính của nó .
Vì vậy, điểm mấu chốt, sau tất cả những gì tôi đã thử: đưa ra một tài liệu contact
, làm cách nào để cập nhật nó nếu nó tồn tại hoặc thêm nó nếu nó không có?
Cảm ơn vì đã dành thời gian cho tôi.
pre
chosave
?