我花了几个小时试图找出如何通过特定字段从文档的子数组中获取记录,但我失败了。
我想通过web服务传递personId,以查找他/她被邀请参加的会议。因此,我可以跟踪被邀请者是否接受参加会议。
基本上,我有以下JSON输出:
{
"status": "success",
"requestedAt": "2021-03-28T22:47:03+11:00",
"size": 1,
"meetings": [
{
"invitedMembers": [
{
"isJoined": false,
"_id": "605ffbc00a21ed718c992549",
"person": "a123",
"__v": 0
}
]
}
]
}
使用这样的控制器:
const memberId = "a123";
const meetings = await Meeting.find({
'invitedMembers.member': memberId
}).populate('invitedMembers');
会议模型类如下:
const mongoose = require('mongoose');
const meetingSchema = new mongoose.Schema({
invitedMembers: [
{
type: mongoose.Schema.Types.ObjectId,
ref: 'InvitedMembers'
}
]
});
const Meeting = mongoose.model(
'Meeting',
meetingSchema
);
module.exports = Meeting;
以及像这样的受邀会员课程:
const mongoose = require('mongoose');
const invitedMembersSchmea = new mongoose.Schema({
member: {
type: mongoose.Schema.Types.ObjectId,
ref: 'Member',
required: true
},
isJoined: {
type: Boolean,
default: false
}
});
const InvitedMembers = mongoose.model(
'InvitedMembers',
invitedMembersSchmea
);
module.exports = InvitedMembers;
会员模式仅包含基本的个人信息,如名字、姓氏等。
我最终使用了一种不同的方法来解决我自己的问题。在这种方法中,我通过添加invitedMembers作为会议模型中的嵌入模型来更改数据结构,并将invitedManagers模式中的person字段更新为_id。更新的会议模型类别:
const mongoose = require('mongoose');
const invitedMembersSchmea = new mongoose.Schema({
_id: {
type: String,
required: true
},
isJoined: {
type: Boolean,
default: false
}
});
const meetingSchema = new mongoose.Schema({
invitedMembers: [
{
type: invitedMembersSchmea
}
]
});
const Meeting = mongoose.model(
'Meeting',
meetingSchema
);
module.exports = Meeting;
因此,我可以使用以下查询通过ID找到受邀成员:
const memberId = "a123";
const meetings = await Meeting.find({
'invitedMembers._id': memberId
});