2011-12-24 22 views
13

Tôi muốn tăng số lượng views lên 1 mỗi khi tài liệu của tôi được truy cập. Cho đến nay, mã của tôi là:

Document 
    .find({}) 
    .sort('date', -1) 
    .limit(limit) 
    .exec(); 

Nơi nào $inc phù hợp ở đây?

+0

Điều này có giúp ích cho bạn không? Nếu không cho tôi biết. –

Trả lời

30

Không bao giờ sử dụng mongoose nhưng nhanh chóng tìm kiếm trên các tài liệu here nó có vẻ như điều này sẽ làm việc cho bạn:

# create query conditions and update variables 
var conditions = { }, 
    update = { $inc: { views: 1 }}; 

# update documents matching condition 
Model.update(conditions, update).limit(limit).sort('date', -1).exec(); 

Chúc mừng và chúc may mắn!

6

Tôi gặp sự cố khác, có liên quan đến $ inc .. Vì vậy, tôi sẽ đăng nó ở đây vì nó có thể giúp người khác. Tôi có đoạn mã sau:

var Schema = require('models/schema.js'); 

var exports = module.exports = {}; 

exports.increase = function(id, key, amount, callback){ 
    Schema.findByIdAndUpdate(id, { $inc: { key: amount }}, function(err, data){ 
     //error handling 
    } 
} 

từ một mô-đun khác nhau tôi sẽ gọi một cái gì đó giống như

var saver = require('./saver.js'); 

saver.increase('555f49f1f9e81ecaf14f4748', 'counter', 1, function(err,data){ 
    //error handling 
} 

Tuy nhiên, điều này sẽ không làm tăng truy cập mong muốn. Rõ ràng nó không được phép trực tiếp truyền chìa khóa vào đối tượng cập nhật. Điều này có liên quan đến cú pháp chuỗi ký tự trong các tên trường đối tượng. Giải pháp là xác định đối tượng cập nhật như sau:

exports.increase = function(id, key, amount, callback){ 

    var update = {}; 
    update['$inc'] = {}; 
    update['$inc'][key] = amount; 

    Schema.findByIdAndUpdate(id, update, function(err, data){ 
     //error handling 
    } 
} 
+6

Lỗi trong phiên bản đầu tiên của mã của bạn là: {{$ inc: {key: amount}} '. Bạn không thực sự sử dụng biến 'key' ở đó, nhưng tạo khóa đối tượng là chuỗi' "key" '. Cách chính xác để viết mã này là '{$ inc: {[key]: amount}}', sử dụng [khóa thuộc tính được tính toán ES2015] (https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Toán tử/Object_initializer). – Joseph

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