一尘不染

猫鼬更新而没有回调

node.js

我有一个典型的架构和模型:

var mongoose = require('mongoose');

var userSchema = new mongoose.Schema({
    email: String,
    password: String,
    profile: {
        name: String,
        surname: String,
        photo: String
    },
    stats: {
        lastLogin: { type: Date, default: Date.now },
        loginCount: Number,
        lastIP: String
    },
    source: String,
    deleted: Boolean,
    dateCreated: { type: Date, default: Date.now }
});

mongoose.model('User', userSchema);

当我执行此更新时,它仅在定义回调时才有效,否则仅执行但数据库中的值未更改:

User.update({email:'foo@bar.com'}, {$inc: {'stats.loginCount': 1}});

这有效:

User.update({email:'foo@bar.com'}, {$inc: {'stats.loginCount': 1}}, function() {});

这是一个错误吗?我没有在文档中看到是否需要回调,但是要求这样做很奇怪……我认为我在这里缺少了一些东西。

注意:我通过电子邮件匹配以测试建议,我在NodeJS v0.8.17中使用猫鼬v3.5.4,并具有简单的Express v3.0.6设置。

提前致谢。


阅读 255

收藏
2020-07-07

共1个答案

一尘不染

update用猫鼬打电话的正确方法如下:

User.update(query, update).exec(callback);

这样,您将可以跳过callback

User.update(query, update).exec();

打电话时

User.update(query, update)

它返回一个查询对象

在查询数据库时,它非常有用,因为您可以在执行查询对象之前对其进行操作。例如,您可以limitfind查询指定一个:

User.find(query).limit(12).exec(callback);

Update 使用相同的机制,尽管在这里没有那么有用。

2020-07-07