2017-02-01 4 views
0

MongoDBを試すためにTinderのようなアプリケーションを開発しています。 私はデータベーススキーマについて不思議です。TinderのようなアプリケーションMongoDBデータベーススキーマ

主な考え方は、ユーザーが多くのユーザーを「好き」にすることができるということですが、「好きな」プロファイルの数がどんなに増えても、16MBのドキュメントサイズの上限を打つことはほとんどありません。 "プロフィールは自分のプロフィールの中に埋め込まれています。以下

が一方マングース

var UserSchema = mongoose.Schema({ 
fullName: { 
    type: String, 
    trim: true 
}, 
phone: { 
    type: String, 
    trim: true, 
    required: true, 
}, 
gender: { 
    type: String, 
    enum: ['male', 'female'], 
}, 
age: { 
    type: Number, 
    required: true 
}, 
favorites: [] 
}); 

を使用して、私のユーザーのスキーマのサンプルでは、​​ユーザーは自分の多くのユーザーによって「嫌わ」される可能性があります。 そのため、次のプロフィール検索で彼を「嫌う」ユーザーのプロフィールを表示しないようにしてください。私のデザインでは、「嫌い」のユーザーIDと「嫌い」ユーザーのIDを保持するコレクションを作成しました"以下

は、あなたがこれは良いアプローチであるマングース

var BlockedSchema = mongoose.Schema({ 
BlockerUserId: { 
    type: String, 
    required: true 
}, 
BlockedUserId: { 
    type: String, 
    required: true 
} 
}); 

を使用して、私のブロックされたスキーマのサンプルだと思いますか?どのインデックスを作成する必要がありますか?あなたはユーザーコレクションに嫌悪感を管理することができます

答えて

1

ベスト

は、唯一、あなたは新しいコレクションを必要としません。

var UserSchema = mongoose.Schema({ 
fullName: { 
    type: String, 
    trim: true 
}, 
phone: { 
    type: String, 
    trim: true, 
    required: true, 
}, 
gender: { 
    type: String, 
    enum: ['male', 'female'], 
}, 
age: { 
    type: Number, 
    required: true 
}, 
favorites: [], 
dislike[] 

}); 

と上記のコードの構文が正しくありませんが、それはあなたのアイデアを与えるだろう

var current_user_id = userdata._id; 

db.users.find({dislike:{$ne:current_user_id}}) 

のように検索します。

+0

ありがとう@Puneet、それはそれを見る別の方法です。索引付けはどうですか?各書き込みでインデックスを書き直す必要があるため、パフォーマンスは_idのデフォルトインデックスの影響を受けますか? – Fouad

+0

デフォルトのインデックスを_idフィールドにドロップすることはできません。ほとんどの場合、少なくともプライマリインデックスを持つことは良いことです。 インデックスよりも使用されていないインデックスが多数ある場合は、パフォーマンスの問題になる可能性があります。 –

+0

私はデフォルトの_idインデックスを削除することについて話していません。私はお気に入りをインデックス化する必要があるかどうかを尋ねています。 – Fouad

関連する問題