2011-12-24 9 views
13

Chciałbym zwiększyć liczbę views o 1 za każdym razem, gdy dostęp do mojego dokumentu jest możliwy. Do tej pory mój kod to:

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

Skąd $inc zmieścić się tutaj?

+0

Czy to pomogło? Jeśli nie daj mi znać. –

Odpowiedz

30

Nigdy używać mongoose ale szybko patrząc na docs here Wydaje się, że to będzie pracować dla Ciebie:

# 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(); 

Pozdrawiam i powodzenia!

6

Wpadłem na inny problem, który jest związany z $ inc .. Opublikuję go tutaj, ponieważ może pomóc komuś innemu. Mam następujący kod:

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 
    } 
} 

z innego modułu nazwałbym coś

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

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

Jednak to nie zwiększy żądany licznik. Najwyraźniej nie można bezpośrednio przekazać klucza do obiektu aktualizacji. Ma to coś wspólnego ze składnią literałów łańcuchowych w nazwach pól obiektowych. Rozwiązaniem było zdefiniowanie obiektu aktualizacji w następujący sposób:

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

Błąd w pierwszej wersji twojego kodu to: '{$ inc: {key: amount}}'. W rzeczywistości nie używasz tam zmiennej 'klucz', ale czyniąc klucz obiektu ciąg' 'klucz" '. Prawidłowy sposób napisania tego kodu to '{$ inc: {[key]: amount}}', przy użyciu [ES2015 computed property keys] (https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Operators/Object_initializer). – Joseph

Powiązane problemy