Mongoose - 嵌套数组中的更新字段

时间:2017-02-16 14:48:38

标签: node.js mongodb mongoose

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

My Expected output is like : 

category : [{
   productCategory : masala
   _id : ObjectId("589d595f6da20b72fe006ea9")
},
{
    productCategory : dhal
   _id : ObjectId("589d595f6da20b72fe006eaa")
}

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

当我想用此代码更新时

{
  "_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
}

它会返回文档,应该表示它成功,但是&c;可用性'数据库中的字段仍未更新。

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

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

1 个答案:

答案 0 :(得分:1)

您可以使用new option

  

new:bool - 如果为true,则返回修改后的文档而不是   原版的。默认为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);
  }
});