2012-11-12 18 views
14

tôi muốn thêm vào dữ liệu trở lại từ một truy vấn cầy mangut:Dữ liệu được trả về từ Mongoose có thay đổi không?

User.findById(userId, function(err, data) { 
    if (!err) { 
    data.newvar = 'Hello, world'; 
    } 
}); 

Tuy nhiên, khi tôi an ủi đăng nhập đầu ra, các newvar không tồn tại. Tôi cũng đã thử điều này bằng cách sử dụng phần mở rộng của Underscore:

_.extend(data, {'newvar': 'Hello, world'}); 

Không may mắn. Vì tôi có tài liệu lồng nhau, sử dụng bản sao nông sẽ không hoạt động. Có cách nào để thêm dữ liệu vào đây không?

Trả lời

3

Khi nó quay ra, tài liệu Mongoose là lớp đặc biệt của riêng họ và không phải là đối tượng Javascript chuẩn. Để có được một tùy chọn javascript có thể được mở rộng, bạn phải sử dụng phương thức toObject().

+3

Tôi là người duy nhất nghĩ có nên được một cảnh báo đưa ra khi bạn cố gắng và đặt giá trị? – backdesk

+0

Phương thức .toObject() chính xác là những gì tôi cần! – Aron

21

Một cách để xử lý này là để chuyển đổi mô hình dụ cầy của bạn thành một đối tượng đơn giản mà bạn có toàn quyền kiểm soát bằng cách gọi toObject() vào nó:

User.findById(userId, function(err, data) { 
    if (!err) { 
    data = data.toObject(); 
    data.newvar = 'Hello, world'; 
    } 
}); 

Nếu bạn muốn có một giải pháp cấu trúc hơn, bạn có thể thêm các thuộc tính ảo cho lược đồ của bạn như được mô tả here.

+1

data.toObject(); Là điều chính .. câu trả lời tốt –

+0

Cảm ơn vì điều này. Tôi đã chuyển hồ sơ người dùng từ mongoose thẳng vào JWT và trường 'hết hạn' đã không được áp dụng vì lý do này. Không cảnh báo hay gì cả. – backdesk

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