1

次のように動作する必要のあるアプリケーションがあります。
- アプリケーションユーザーがフィルタを設定し、アプリケーションが引用符を返したとき。
- そのユーザーが「見積もり」を好き嫌いすることがあります

約60K引用符とほぼ同数のユーザーがあります。 埋め込み配列を使用して、好きな値を&に詰め込んだり、別のコレクションを作成してから検索したりするのは混乱します。 私は2andオプションが2つのクエリを必要とし、より遅くなることを知っています。Tinderのようなアプリケーション、組み込みドキュメント、または別のコレクションのためのMongoDBスキーマ設計?

エンベデッドアレイメソッドを使用すると、パフォーマンスの低下が目撃される前にいくつの引用符IDを格納できますか?

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

PS:同様の機能を達成するための任意のより良い方法があれば、コメントや溶液中で言及しない

EDIT 1:
ヒントを@niralパテルいただきありがとうございます。

私はMongoDBはこの質問への可能な解決策で行った調査に基づき、私は現実の世界でしまうcome from another collectionについて10K乱数の配列を作成し、$ninオペレータとマングースの検索クエリにそれを渡されたテストを考案し 高負荷ではクエリが遅くなることが予想されましたが、テストではかなり高速でした。
)4GBデュアルコアボックス Ubuntuで動作しています。 httpプロキシの後ろに2つのノードプロセスがあります。

私の最後のクエリでは、あなたがより多くを成長しないだろう言っていますか嫌い引用符の量を知っていればmongodb.com

6 rules of thumb for MongoDB schema

から、この有益な記事によると、この

var userIDs = []; 

// filling userIDs with random numbers 
for(var i=0;i<10000;i++){ 
    userIDs.push(Math.floor(Math.random() * (90000 - 50000)) + 50000); 
} 

users.find(user_id:{$nin:userIDs}}).limit(10).lean().exec(function(e,d){ 
    console.log(d); // results 
}); 

答えて

2

のように見えました何千ものUserSchemaに引用符の配列を配列し、populate()を使用することができます。 このアプローチは、1つのクエリを起動するだけで済むので、パフォーマンスが向上します。あなたのユーザーの情報を表示すると、あなたの好き嫌いの引用も表示されると私は推測しています。その場合、これはより良いアプローチになります。

大量になることがわかっている場合は、すべてのIDで別のコレクションを作成することもできます。その場合は、余分なクエリを発生させる必要があります。

+0

私は、開発者の多くが見たように、私はRDBMSの背景からmongodbのドキュメントを参照しています。結果の計算の段階をサポートする集約フレームワークについて言及しています。したがって、私の場合は、集約? – Harshwardhan

+0

@Harshwardhanはい、あなたはマングースを使っているなら、あなたは人口を使うことができます。 [リンク](http://mongoosejs.com/docs/populate.html)。 –

関連する問題