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?
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?
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!
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
}
}
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
Czy to pomogło? Jeśli nie daj mi znać. –