【发布时间】:2016-09-27 20:17:27
【问题描述】:
我想要做什么。
我有一个userSchema,其中包含operationCountSchemaobjects 的列表。我要做的是创建一个静态方法,如果存在(由month_id 标识)字段,则更新这些操作计数子文档之一上的count 字段。如果当前月份不存在operationCountSchema 文档,则应创建一个新文档。有没有办法在猫鼬中实现这种行为?我曾尝试使用 upsert 无济于事。如何做到这一点?谢谢。
代码
var operationCountSchema = mongoose.Schema({
month_id: String,
count: { type: Number, default: 0 }
}, {_id : false});
var userSchema = mongoose.Schema({
username : { type: String, unique: true, required: true },
email: { type: String, unique: true, required: true },
password: String,
operation_counts: [operationCountSchema]
});
userSchema.statics.incrementOperationCount = function(userID, callback) {
var currDate = new Date();
var dateIdentifier = currDate.getFullYear() + "-" + currDate.getMonth();
//NEED TO INCREMENT OPERATION COUNT IF ONE FOR MONTH EXISTS,
//ELSE IF IT DOES NOT EXIST, CREATE A NEW ONE.
}
此外,欢迎任何有关实现此功能的替代方法的建议。
【问题讨论】:
-
通过静态方法传递值并检查子文档是否存在(使用
this关键字)。如果存在修改并调用回调。否则使用this.sub-docment = <your-values>创建子文档并调用回调。一旦回调被调用,使用猫鼬文档save()方法来保存修改后的文档。 -
month_id需要匹配什么来增加计数? -
@Chinni month_id 需要匹配 dateIdentifier。
标签: javascript node.js mongodb mongoose