我有一个简单的架构:
,
我尝试将额外的对象更新为文档项,这是一个例子:
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
答案 0 :(得分:0)
与更新操作一起使用时,例如db.collection.update()和db.collection.findAndModify(),
位置$运算符充当与查询文档匹配的第一个元素的占位符。
答案 1 :(得分:0)
我发现了这个问题,对我来说很遗憾。这是Postman的一个问题,实际上我以为我在使用PUT,但它是POST对应我的功能添加额外的,我现在明白为什么它从来没有用过......
需要冷却我的大脑,愚蠢的问题