我的问题是我想将数据推送到MongoDb文档中数组中的指定位置,但是当我推送新数据时,它并没有将它添加到正确的位置。
运行此更新语句时:
collection.update({ "schraenke.name": "Schrank1" }, {
$push:
{
"schraenke": [{
"masterbricks": {
"sensor1": { value: "test" }
}
}]
}
});`
上述更新的结果是文件:
{
"_id": "55599876095c6bac18209dfa",
"name": "Serverraum1",
"schraenke": [
{
"name": "Schrank1",
"nummer": "1",
"reihe": "1",
"masterbricks": {
"name": "Mastrebrick2.0",
"uid": "6dKiRt",
"he": "1-20",
"sensor1": {
"name": "Temperatur",
"uid": "qvf"
}
}
},
[
{
"masterbricks": {
"sensor1": {
"value": "test"
}
}
}
],
]
}
值字段应添加到"sensor1"
,但它会添加一个新数组。
我的预期结果是:
{
"_id": "55599876095c6bac18209dfa",
"name": "Serverraum1",
"schraenke": [
{
"name": "Schrank1",
"nummer": "1",
"reihe": "1",
"masterbricks": {
"name": "Mastrebrick2.0",
"uid": "6dKiRt",
"he": "1-20",
"sensor1": {
"name": "Temperatur",
"uid": "qvf",
"value" : "test"
}
}
},
]
}
我做错了什么?
答案 0 :(得分:4)
您需要在更新中应用$push
运算符和 $set
,而不是使用$
positional operator,以便将新文档推送到正确的位置。 $
positional operator 将标识要更新的数组中的正确元素,而不显式指定元素在数组中的位置,因此最终的更新语句应如下所示:
db.collection.update({ "schraenke.name": "Schrank1" },
{
"$set": {
"schraenke.$.masterbricks.sensor1.value": "test"
}
}
)
<强>结果强>:
/* 0 */
{
"_id" : "55599876095c6bac18209dfa",
"name" : "Serverraum1",
"schraenke" : [
{
"name" : "Schrank1",
"nummer" : "1",
"reihe" : "1",
"masterbricks" : {
"name" : "Mastrebrick2.0",
"uid" : "6dKiRt",
"he" : "1-20",
"sensor1" : {
"name" : "Temperatur",
"uid" : "qvf",
"value" : "test"
}
}
}
]
}
答案 1 :(得分:0)
$push添加数组字段,并将值作为元素。
您应该使用$Set
collection.update({ "schraenke.name": "Schrank1" }, {
$set:
{
"schraenke": [{
"masterbricks": {
"sensor1": { value: "test" }
}
}]
}
});
答案 2 :(得分:0)
如果您使用$push
,则使用以下更新查询将"value" : ["test"]
数组添加到sensor1
中:
db.collectionName.update({"schraenke.name":"Schrank1"},
{"$push":{"schraenke.$.masterbricks.sensor1.value":"test"}})
而不是push
如上所述使用$set
chridam ,并在集合中使用upsert
true
。