【问题标题】:How to update document on pre or post query hook in mongoose?如何在猫鼬中更新前或后查询钩子上的文档?
【发布时间】:2015-07-15 00:01:32
【问题描述】:

我正在尝试更新查询挂钩上的字段。例如:

var mySchema = new Schema({
  name: String,
  queryCount: {type: Number, default:0}
});

我想在每个 findfindOne 查询中增加和更新 queryCount 字段。

mySchema.post('find', function (doc) {
  // here is the magic
});

我已经尝试了一些事情,但到目前为止没有成功。我可以在模型中实现这一点还是必须在控制器中实现?

【问题讨论】:

  • 你试过什么? doc.update({$inc: {queryCount: 1}}, callback) 不起作用?
  • @JasonCust 这就是 OP 所要求的,是否可以在模型级别上做同样的事情。此查询必须在控制器上运行。

标签: javascript node.js mongoose hook


【解决方案1】:

你想要的是post init hook

mySchema.post('init', function (doc) {
  doc.queryCount++;
  doc.save();
});

【讨论】:

【解决方案2】:

或者,您可以使用内部调用 findAndUpdate() 的 mongoose 静态方法

mySchema.statics.findWithIncrement = function (query, callback) {

    this.findAndUpdate(query, { $inc: { queryCount: 1 })
        .exec(function(err, res) {

            if (err) return callback(err);

            //Handle response
        });
}

然后在你的控制器中使用该方法:

MyModel.findWithIncrement({name: "someName"}, function (err, result) {

})

【讨论】:

  • 我试图用钩子来做。如果我没有看到@laggingreflex 的回答,我会接受这个。不过还是谢谢你...
  • 这只是一个替代方案......我已经投票赞成@laggingreflex的答案:)
猜你喜欢
  • 1970-01-01
  • 2014-03-21
  • 1970-01-01
  • 2015-06-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-01
相关资源
最近更新 更多