我正在创建一个使用cosmosDB和mongodb API的节点应用程序。该应用程序将允许用户根据分配的角色在其他资源上执行任务。
// Users Schema
const userSchema = mongoose.Schema({
email: String,
password: String
});
// Hotel Schema
const hotelSchema = mongoose.Schema({
name: String,
people: {
type: [{
userId: {
type: mongoose.Schema.Types.ObjectId, ref: 'User', required: true
},
role: {
type: String, ref: 'User', enum: ['Visitor', 'Worker']
}
}]
}
});
酒店可以有一个人员列表,其中包含用户及其角色的数组。我希望能够使用userId查询酒店,并且只检索来自' people'的数组元素。包含匹配的userId。
我试过了:
Hotel.find({
'people.userId': request.params.id
},
{
people: {
$elemMatch: {
userId: request.params.id
}
}
},
{ 'people.$': 1 });
我预计结果是:
[
{
'name': 'Hotel 1',
'people': [
{
'email': 'bob@some.com',
'role': 'Worker',
'_id': '59c3f09b8146bd11dce0fd42'
}
]
}
]
但我最终得到的是:
[
{
'name': 'Hotel 1',
'people': [
{
'email': 'bob@some.com',
'role': 'Worker',
'_id': '59c3f09b8146bd11dce0fd42'
},
{
'email': 'peter@some.com',
'role': 'Worker2',
'_id': '59c3f1f48146bd11dce0fd54'
},
{
'email': 'john@some.com',
'role': 'Visitor',
'_id': '59c3f1f48146bd11dce0fd56'
}
]
}
]
有没有办法实现我的预期结果,而无需从javascript代码中的结果中提取元素。
由于