【问题标题】:Mongoose select an object in Array with specific propertyMongoose 在 Array 中选择具有特定属性的对象
【发布时间】:2020-06-08 01:36:32
【问题描述】:

来自这个“房屋”系列

{
  _id: "0",
  rooms: [
    {
      roomName: "living-room"
      chairs: "6"
    },

    {
      roomName: "kitchen"
      chairs: "0"
    }
  ]
}

我需要找到 _id = 0 的房子,并且只选择 “客厅”中的“椅子”,结果如下所示:

{
  chairs: 6
}

我想到了一些看起来像这样的东西: House.findOne({_id: '0'}).select('rooms.chairs') // but only from {roomName: "living-room"} 如何完成查询?

【问题讨论】:

    标签: json mongodb mongoose


    【解决方案1】:

    这个怎么样:

    db.houses.aggregate([
       { $match: { _id: "0" } },
       {
          $project: {
             chairs: {
                $filter: {
                   input: "$rooms",
                   cond: { $eq: ["$$this.roomName", "living-room"] }
                }
             }
          }
       },
       {
          $replaceRoot: {
             newRoot: {
                chairs: { $arrayElemAt: ["$chairs.chairs", 0] }
             }
          }
       },
    ])
    

    【讨论】:

    • 太棒了!我将此应用于我的情况并且它有效!因此,我将此标记为答案。
    【解决方案2】:
    db.house.findOne({"rooms.chairs":"6"},{"rooms.$":1})
    

    【讨论】:

    • 为了澄清更多,查询的重点应该是只找到并选择chairs,而不是通过它的值来查询
    猜你喜欢
    • 2012-06-08
    • 1970-01-01
    • 2015-11-05
    • 2019-05-05
    • 2020-02-10
    • 1970-01-01
    • 2012-10-28
    • 1970-01-01
    • 2017-12-06
    相关资源
    最近更新 更多