0
私が達成しようとしているのは、お互いを照合することです。 この動作を実現するには、ユーザーの一致する配列にドキュメントを埋め込みます。Mongoose:埋め込まれた文書とユーザーIDを一致
相続人は私のUser
モデル
const mongoose = require('mongoose');
const Schema = mongoose.Schema;
const Match = new Schema({
with: {type: Schema.Types.ObjectId, ref: 'User'},
near: {type:String},
createdAt: {type:Date, default: Date.now}
});
const UserSchema = new Schema({
name: { type: String, default: '' },
surname: { type: String, default: '' },
email: { type: String, default: '', },
salt: { type: String, default: '' },
hashed_password: { type: String, default: '' },
interested: { type: [String] },
about: { type: String },
createdAt: {type:Date, default:Date.now},
devices: {type: [String]},
matches: [Match]
});
しかし、信頼性の高いアプリケーションロジックのため
、 ユーザーは二回マッチしてはいけません。私の計画では、一致する配列内に一致する人物を一緒に挿入します。たとえば、
User A
_id: 123
matches: [{with: 456,near:California,createdAt:someDateTime}]
User B
_id: 456
matches: [{with: 123,near:California,createdAt:someDateTime}]
マッチが発生する前に、私は、ユーザーのいずれかが前にマッチしたかどうか、それはatomic
でなければならないかどうかを制御する必要があります。
ありがとうございました。
しかし、それはモデルまたはスキーマそのものではなく、埋め込まれたドキュメントです。どのように私はそれをクエリすることができますか? –
@AlicanYilmaz申し訳ありませんが、私は速すぎました。自分のコレクションにマッチを保存する方が簡単ですか?両方のユーザーから参照でき、1人のユーザーが一致を元に戻すことを決定した場合は、参照を自動的に削除することができます。 – smiggle
私の最近のデザインはそうだった、私は別々のコレクションで試合を集めていた。しかし、その場合、大きな問題があります。クエリが同時に実行されると、一致コレクションのsave()が同時に2回実行されます。これは、不整合の大きな問題に頼っています。ここでそれに従うことができます。 https://stackoverflow.com/questions/47718970/mongoose-atomic-save?rq=1 –