Mongoose:将UserID与Embedded Document匹配

时间:2017-12-08 21:44:07

标签: javascript node.js mongodb express mongoose

我想要达到的目标是让人们相互匹配。 为了实现这种行为,我将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

感谢。

1 个答案:

答案 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"] } } )