2012-01-30 33 views
10

Tôi đang sử dụng Node.js và Mongoose để lưu trữ một số dữ liệu. Sau khi cập nhật, tôi có cấu trúc sau:Mongoose, Xóa Thuộc tính khỏi Mẫu

{ created: Mon, 30 Jan 2012 19:25:57 GMT, 
    _id: 4f21a6028132fba40f0000b7, 
    features: 
    { imdb_id: 'tt0822975', 
    released: '2007-03-24', 
    tvdb_id: 103191, 
    type: 'series', 
    names: [ 'DinoSapien' ], 
    pictures: [], 
    cast: [], 
    genres: [ 'Action and Adventure', 'Children' ] }, 
    type: 1 } 

Tôi cần xóa ví dụ: castpictures trường trên tài liệu này. Tuy nhiên, tôi đã áp dụng một giải pháp để xóa các mảng trống khỏi cơ sở dữ liệu nhưng không hoạt động:

instance = (an instance from calling findOne on my model) 
cast = (an array) 
if (cast && cast.length > 0){       
    instance.features.cast = cast;      
} else { 
    delete instance.features.cast; 
} 
console.log(cast); // null 
console.log(instance), // cast is not removed! 

Có thể loại bỏ các mảng trống hoặc các giá trị không mong muốn khỏi mô hình khi lưu vào db không?

Trả lời

9

Bạn có thể dùng một cái móc tiền tiết kiệm để kiểm tra đối với những lĩnh vực có sản phẩm nào, và đặt chúng vào undefined như thế này:

PostSchema.pre('save', function (next) { 
    if(this.pictures.length == 0){ 
     this.pictures = undefined; 
    } 
    if(this.cast.length == 0){ 
     this.cast = undefined; 
    } 

    next(); 
}); 

Tôi thử nghiệm này tại địa phương và có vẻ như để làm tốt công việc.

+0

Dường như bạn không thể làm điều đó với các trường loại ObjectId, nhưng cách suy nghĩ tốt đẹp! :) – panosru

Các vấn đề liên quan