我想要达到的目标是让人们相互匹配。 为了实现这种行为,我将Match文档嵌入到用户的匹配数组中。
继承我的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
。
感谢。
答案 0 :(得分:0)
也许这有效:
const Match = new Schema({
matchedIds: [ {type:string} ]
near: {type:String},
createdAt: {type:Date, default: Date.now}
});
所以matchedIds
只包含两个userID。您可以通过以下方式找到匹配项:
db.match.find( { matchedIds: { $all: ["UserID 1", "UserID 2"] } } )