Mongoose从结果中检索单个数组元素

时间:2017-09-21 17:57:45

标签: mongodb mongoose azure-cosmosdb

我正在创建一个使用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代码中的结果中提取元素。

由于

0 个答案:

没有答案