【问题标题】:Matching array of objects containing an Object using Aggregration framework使用聚合框架匹配包含对象的对象数组
【发布时间】:2019-08-01 02:55:25
【问题描述】:

这就是我的 mongodb 数据库中的数据。

_id:ObjectId('5c38e514b88edd0ef236c3f7'),
rooms:[
 {
   info:{
      name:'John',
      age:'23'
   }
 },
 {
   info:{
      name:'Mary',
      age:'15'
  }
 }
]

使用聚合框架,我想匹配位于房间数组中的 info 对象内的“name”字段。我如何做到这一点?

到目前为止我所尝试的:

    Hotel.aggregate([
        {$match: {
                 '_id':mongoose.Types.ObjectId(lodgeId), 
                 'rooms.info.name':'John'}}
   )]

这给了我所有房间,而不是匹配名字为 John 的房间。

如何只获取匹配的行?

【问题讨论】:

  • 尝试将 'rooms.info.name':'John' 替换为 'rooms.info.name': {$eq: ['John']}

标签: node.js mongodb express mongoose aggregation-framework


【解决方案1】:

如果你在比赛前展开 rooms 数组:

Hotel.aggregate([
    {$unwind: "$rooms"},
    {$match: {
             '_id':mongoose.Types.ObjectId(lodgeId), 
             'rooms.info.name':'John'}}
)]

您应该得到一份文件,其中只包含名称为 John 的房间。

Unwind 将数组字段转换为数组中每个项目的新文档。

【讨论】:

    猜你喜欢
    • 2023-02-23
    • 1970-01-01
    • 2019-07-23
    • 2020-04-28
    • 2012-06-26
    • 2018-04-02
    • 2017-11-19
    • 1970-01-01
    • 2022-10-13
    相关资源
    最近更新 更多