【发布时间】:2016-09-02 18:27:27
【问题描述】:
由于唯一性,我想使用 ES2015 中标准化的 Javascript 的 Set 作为 Mongoose 中的 SchemaType。但是 Mongoose 文档不明确支持 Set,尽管“混合”类型似乎是一般的“任何事情都可以”类型 (http://mongoosejs.com/docs/schematypes.html)。
我已经根据Thinkster.io 上的 MEAN 堆栈 Reddit/Hacker News 教程在我的网络应用程序中尝试了“混合”,但遇到了错误。我想将所有点击了upvote的用户存储在一个集合中。但只有第一次点击upvote才有效。第一次点赞后,如果页面被刷新,点赞数会重置为0,点赞不再起作用。我做了一些console.logging,发现第一次,upvoters 正确设置为新的 Set()。但是刷新页面或后续点击 upvote 会将 set 对象重置为更通用的 [object Object],因此 set 的添加和长度不起作用。感谢您的帮助!
Posts.js:
var mongoose = require('mongoose');
var PostSchema = new mongoose.Schema({
title: String,
link: String,
upvotes: {type: Number, default: 0},
comments: [{ type: mongoose.Schema.Types.ObjectId, ref: 'Comment' }],
author: String,
upvoters: Object
});
PostSchema.methods.upvote = function(cb, upvoter) {
if(this.upvoters == null){
this.upvoters = new Set();
}
this.upvoters.add(upvoter);
this.markModified('upvoters');
this.upvotes = this.upvoters.length;
this.save(cb);
};
mongoose.model('Post', PostSchema);
【问题讨论】:
标签: javascript node.js mongodb mongoose set