根据Mongoose's documentation方法findOneAndUpdate
传递时,new: true
选项应返回包含新更新的更新文档。但似乎4.0可能已经改变了?
new:bool - 如果为true,则返回修改后的文档而不是原始文档。默认为false(在4.0中更改)
我有这段代码,console.log
不返回更新后的信息。也没有回调。
Users.findOneAndUpdate({ _id: ObjectId(user._id) }, {
$set: {
files: view.getDocumentsOnly(files.files)
}
}, { new: true }, function(err, userWithFiles) {
console.log(userWithFiles);
callback(userWithFiles.value);
});
问题:
有谁知道如何在Mongoose 4.0中返回更新的文档?
上下文
函数view.getDocumentsOnly()
只是获取一系列Google Drive对象,并返回一个仅包含文档mimeType的对象数组,而不是电子表格或文件夹。它同步这样做,我可以确认它是否正常工作。我还可以确认我的MongoDB中正在更新该文档。
更新
这是完整的代码。函数参数user
是一个mongo doc。如果您有任何问题,请告诉我。
getDriveFiles: function(user, callback) {
var oauth2Client = new OAuth2(clientID, clientSecret, redirectURI)
oauth2Client.credentials = user.auth.token;
google.drive({ version: 'v3', auth: oauth2Client }).files.list({
auth: oauth2Client,
}, function(err, files) {
if (!err) {
Users.findOneAndUpdate({ _id: ObjectId(user._id) }, {
$set: {
files: view.getDocumentsOnly(files.files)
}
}, { new: true }, function(err, userWithFiles) {
console.log(userWithFiles);
callback(userWithFiles.value);
});
}
});
},
用户模型:
在上面与getDriveFiles
相同的文件的顶部引用。引用方式如下:
const db = mongoose.connect(env.DATABASE_URI).connection;
const Users = db.collection('users');
以下是用户模型:
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var UserSchema = new Schema({
files: [],
auth: {},
ref: { type: String, default: id.generate() },
stamp: { type: Date, default: Date.now },
in : { type: Boolean, default: false }
});
mongoose.model('User', UserSchema);
的console.log
以下是console.log
返回的内容
{ value:
{ _id: 57768c0b9712fe2d393dfcfb,
ref: 'rk4MnbE8',
auth:
{ code: // removed,
token: [Object] },
in: true,
stamp: 1467386891876 },
lastErrorObject: { updatedExisting: true, n: 1 },
ok: 1 }