ES2015で標準化されたJavascriptのSetを、一意性のためにMongooseのSchemaTypeとして使用したいと考えています。しかし、MongooseのドキュメントはSetを明示的にサポートしていませんが、 "Mixed"タイプは一般的な "anything goes"タイプ(http://mongoosejs.com/docs/schematypes.html)のようです。MongooseスキーマタイプとしてJavascript Setを使用しますか?
平均的なReddit/Hacker NewsチュートリアルThinkster.ioに基づいて私のWebアプリケーションで "Mixed"を試みましたが、バグがありました。私はセットでupvoteをクリックしたすべてのユーザーを保存します。しかし、upvoteをクリックするのは初めてです。 upvoteを最初にクリックした後、ページがリフレッシュされると、upvoteカウントは0にリセットされ、upvoteをクリックしても機能しなくなります。私はいくつかのconsole.loggingを行い、初めてアップウィートが新しいSet()に正しく設定されていることを発見しました。しかし、ページをリフレッシュしたりupvoteをクリックしたりすると、setオブジェクトはより一般的な[objectオブジェクト]にリセットされ、addと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);
ありがとうございました!あなたのコードは動作しますが、セットと配列の両方を使用して2と3の間で前後に変換するのは大きなパフォーマンスの低下ですか? – CarlGammaSagan
私はパフォーマンスについて多くのことを研究していないので、良い記事を見つけたかどうか教えてください。ちなみに、mongooseオブジェクトやmongoose ObjectIdを追加するときに 'Set#add'は動作しますか? 'upvoter'を同じにして' upvote() 'を起動すると、重複した値がありますか? – kitlee