【问题标题】:Mongoose - Update field in nested arrayMongoose - 更新嵌套数组中的字段
【发布时间】:2017-07-05 18:11:36
【问题描述】:

我有一个看起来像这样的集合

{
  "_id":ObjectId("58a5a40663d24e0498ecf5e1"),
  "picture":null,
  "close":{
    "hour":19,
    "minute":30
  },
  "open":{
    "hour":7,
    "minute":0
  },
  "location":{
    "latitude":-6.304718,
    "longitude":106.64337
  },
  "address":"abcd",
  "placeName":"xyz",
  "floor":[
    {
      "number":1,
      "slot":[
        {
          "id":"A1",
          "availability":true
        },
        {
          "id":"A2",
          "availability":true
        },
        {
          "id":"A3",
          "availability":true
        },
        {
          "id":"A4",
          "availability":true
        },
        {
          "id":"A5",
          "availability":true
        },
        {
          "id":"B1",
          "availability":true
        },
        {
          "id":"B2",
          "availability":true
        },
        {
          "id":"B3",
          "availability":true
        },
        {
          "id":"B4",
          "availability":true
        },
        {
          "id":"B5",
          "availability":true
        }
      ]
    },
    {
      "number":3,
      "slot":[
        {
          "id":"A1",
          "availability":true
        },
        {
          "id":"A2",
          "availability":true
        },
        {
          "id":"A3",
          "availability":true
        },
        {
          "id":"B4",
          "availability":true
        },
        {
          "id":"B5",
          "availability":true
        }
      ]
    }
  ],
  "__v":0
}

现在我想更新 slot.id 与给定查询匹配的“可用性”字段之一。

当我想用这段代码更新时

ParkingPlace.findOneAndUpdate({
  '_id': mongoose.Types.ObjectId(placeID),
  'floor': {
    $elemMatch: {
      'number': body.floor
    }
  },
  'floor.slot': {
    $elemMatch: {
      'id': body.slot
    }
  }
}, {
  $set: {
    'slot.$.availability': false
  }
}, function (err, docs) {
  if (err) {
    res.json(err);
  } else {
    res.json(docs);
  }
});

返回文档,应该表示成功,但数据库中的“可用性”字段仍未更新。

有谁知道为什么以及如何解决它?

**编辑: 我的意思是数据库上的“可用性”字段仍然设置为 true,即使我已经将其设置为 false。

【问题讨论】:

    标签: node.js mongodb mongoose


    【解决方案1】:

    你可以使用new option:

    new: bool - 如果为真,则返回修改后的文档而不是 原版的。默认为 false(在 4.0 中更改)

    ParkingPlace.findOneAndUpdate({
      '_id': mongoose.Types.ObjectId(placeID),
      'floor': {
        $elemMatch: {
          'number': body.floor
        }
      },
      'floor.slot': {
        $elemMatch: {
          'id': body.slot
        }
      }
    }, {
      $set: {
        'slot.$.availability': false
      }
    }, {
      new: true
    }, function (err, docs) {
      if (err) {
        res.json(err);
      } else {
        res.json(docs);
      }
    });
    

    【讨论】:

    • 我的意思是即使在数据库中,'availability'字段仍然设置为true,即使我已经将它设置为false
    猜你喜欢
    • 2017-01-24
    • 2016-08-17
    • 2021-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-09
    • 2016-10-06
    相关资源
    最近更新 更多