Mongoose,findOneAndUpdate,更新到数组,但重复

时间:2016-11-04 20:59:19

标签: node.js mongodb mongoose

我有一个简单的架构:

,

我尝试将额外的对象更新为文档项,这是一个例子:

var extraSchema = new Schema({
    key : String,
    value : String,
    id : String

});

var ItemSchema = new Schema({

  department : String,
  category : String,
  id : String,
  name : String,
  description : String,
  price : Number,
  seller : String,
  quantity : Number,
  extra : [extraSchema],
  visible : Boolean

});

所以我想更改id 1的额外元素,值为.250

我做了以下事情:

{
  "_id": "581cf2597b27281f04e8619e",
  "name": "300",
  "description": "The dvd of the movie 300",
  "price": 19,
  "seller": "BestDVD",
  "id": "1",
  "quantity": 10,
  "department": "581c783f41d2893b80f3b0ba",
  "category": "581c7f8441d2893b80f3b0c0",
  "visible": true,
  "__v": 0,
  "extra": [
    {
      "id": "1",
      "value": ".100",
      "key": "weight",
      "_id": "581cf2667b27281f04e8619f"
    }
  ]
}

当我这样做时,它不会更新id 1的额外元素,但它会重复元素并改变权重:

  Item.findOneAndUpdate({'extra.id' : req.body.id},
              {'$set' : {
                'extra.$.key' : req.body.key,
                'extra.$.value' : req.body.value
              }}, function(err) {
                if (err) throw err;
              }
            );

我不明白会发生什么,有人有好主意吗?

提前感谢您的帮助

干杯, mph

2 个答案:

答案 0 :(得分:0)

与更新操作一起使用时,例如db.collection.update()和db.collection.findAndModify(),

位置$运算符充当与查询文档匹配的第一个元素的占位符。

答案 1 :(得分:0)

我发现了这个问题,对我来说很遗憾。这是Postman的一个问题,实际上我以为我在使用PUT,但它是POST对应我的功能添加额外的,我现在明白为什么它从来没有用过......

需要冷却我的大脑,愚蠢的问题