node.js - 推送新对象不会在回调中返回

标签 node.js mongodb mongoose

在将其标记为重复项之前: 进一步仔细阅读,我正在尝试从 DOC 本身更新 DOC。不使用架构或模型。因此,任何 .findById* 都会被排除在外。

这是我的架构当前的样子(仅相关部分):

let UserAccSchema = new Schema({
meta : {
accessControl: {
authTokens:[{
    issuedOn: {
        type: Date,
        default: Date.now()
    },
    expiresOn: {
        type: Date,
        default: Date.now() + 1728000000 //Defaults to 20-days
    },
    lastUsage: {
        type: Date,
        default: Date.now()
    },
    authAgent: {
        type: String,
        default: "default"
    }
}]}}
});

我想在“meta/accessControl/authTokens”中推送一个新对象。我目前的做法是:

UserAccSchema.methods.generateAuthToken = function (authAgent, cb) {
    console.info("MongoUser | Auth | Attempting to generate auth token for user | " + this._id);
    this.update({
        $push: {
            "meta.accessControl.authTokens": {
                authAgent: authAgent
            }
        }
    }, {safe: true, new: true, upsert:true}, function (err, obj) {
        if (err) {
            console.error("MongoUser | Auth | Error occurred while saving auth-token information | " + err);
            cb(new AppError("Auth token cannot be generated. Please try again.", AppError.ErrorCode.INTERNAL_SERVER_ERROR));
        } else {
            console.info("MongoUser | Auth | Auth token for user was generated | " + JSON.stringify(obj));
            cb(null, obj);
        }
    });
};

上面的代码正在完成这项工作,但我遇到的问题是当推送新对象时,新对象不会返回:

function(err,obj) {

}

而是返回这个:

{"n":1,"nModified":1,"ok":1}

我想知道的是:

  • 我哪里错了?
  • 我这样做的方式正确吗?还有其他方法$push obj吗?

谢谢

最佳答案

.update只返回修改后的文档数量

as {"n":1,"nModified":1,"ok":1}

要返回修改后的文档,您可以使用 findOneAndUpdate

db.foo.findOneAndUpdate({class: 3}, {$set:{name: 231}}, {new: true}) 将返回响应为

{
    "_id" : ObjectId("58db5f4a611f51a2bf08bbb0"),
    "name" : "parwat",
    "class" : 3
}

关于node.js - 推送新对象不会在回调中返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43426498/

相关文章:

node.js - Slickgrid 基本示例 - 在 node/express 中,只有第一行数据加载但不可见

node.js - 奥斯曼无法解析引用的问题

javascript - 通过 JavaScript 访问亚马逊 DynamoDB 上的数据

java.net.SocketException : No buffer space available (maximum connections reached? ): 连接 MongoDB JAVA API 驱动程序

mysql - 在一个项目中同时使用 Mongodb 和 Mysql

node.js - Node-acl 方法 "isAllowed"总是意外返回 false

mongodb - 了解 Golang 上下文超时

javascript - Mongoose :删除子文档内容

node.js - Mongoose 模型中自动递增数字字段

javascript - Mongoose 模式中的加入/查找聚合