Mongo 根据索引更新数组中的字段
Mongo update field in array based on index
我有一个项目集合 (Projects
),其中有一条记录 project
,其中有一个数组 equipInfo
,假设我想更新数组中索引 1 的数量:
"techInfo" : {
"equipInfo" : [
{
"item" : {
"$ref" : "equipment",
"$id" : ObjectId("581a20cb4abab607fd17f07d")
},
"quantity" : "22800",
"type" : "module"
},
{
"item" : {
"$ref" : "equipment",
"$id" : ObjectId("581a20cb4abab607fd17f07e")
},
"quantity" : "1666", <===== UPDATE THIS!!!!!!
"type" : "inverter"
}
]
}
所以我尝试了:
Projects.update(
{_id: projectId},
{$set: {"techInfo.equipInfo.1.quantity": 1000000}
);
但这不起作用,我正在使用 Meteor.js 顺便说一句
我想你需要这个:
Projects.update(
{_id: projectId},
{$set: {"techInfo.equipInfo.1.quantity": 1000000}
);
"this doesn't work" 是什么意思?有错误吗?
以下按预期工作,如新流星项目中的 /server/main.js:
import { Meteor } from 'meteor/meteor';
import { Mongo } from 'meteor/mongo'
Projects = new Mongo.Collection("projects");
Meteor.startup(() => {
Projects.remove({})
Projects.insert( {
"techInfo": {
"equipInfo": [{
"item": {
"$ref": "equipment",
"$id": new Mongo.ObjectID("581a20cb4abab607fd17f07d")
},
"quantity": "22800",
"type": "module"
},
{
"item": {
"$ref": "equipment",
"$id": new Mongo.ObjectID("581a20cb4abab607fd17f07e")
},
"quantity": "1666",
"type": "inverter"
}
]
}
} )
let techInfo = Projects.findOne();
Projects.update({ _id: techInfo._id },
{ $set: { "techInfo.equipInfo.1.quantity": 1000000 } }
);
console.log(Projects.findOne().techInfo);
});
这应该可以,$set
之前的{
需要关闭
Projects.update(
{_id: projectId},
{$set: {"techInfo.equipInfo.1.quantity": 1000000}}
);
如果您只想更新数组的第一个对象而不取决于条件,这就是您的解决方案
Projects.update({_id: projectId},{$set : {"techInfo.equipInfo.0.quantity" : 1000000}})
如果你想遍历元素找到数组并更新它,你可以使用这个
Projects.update({_id: projectId,"techInfo.equipInfo" : {"$elemMatch" : {"type" : "module"}}},{$set : {"techInfo.equipInfo.$.quantity" : 1000000}})
我有一个项目集合 (Projects
),其中有一条记录 project
,其中有一个数组 equipInfo
,假设我想更新数组中索引 1 的数量:
"techInfo" : {
"equipInfo" : [
{
"item" : {
"$ref" : "equipment",
"$id" : ObjectId("581a20cb4abab607fd17f07d")
},
"quantity" : "22800",
"type" : "module"
},
{
"item" : {
"$ref" : "equipment",
"$id" : ObjectId("581a20cb4abab607fd17f07e")
},
"quantity" : "1666", <===== UPDATE THIS!!!!!!
"type" : "inverter"
}
]
}
所以我尝试了:
Projects.update(
{_id: projectId},
{$set: {"techInfo.equipInfo.1.quantity": 1000000}
);
但这不起作用,我正在使用 Meteor.js 顺便说一句
我想你需要这个:
Projects.update(
{_id: projectId},
{$set: {"techInfo.equipInfo.1.quantity": 1000000}
);
"this doesn't work" 是什么意思?有错误吗?
以下按预期工作,如新流星项目中的 /server/main.js:
import { Meteor } from 'meteor/meteor';
import { Mongo } from 'meteor/mongo'
Projects = new Mongo.Collection("projects");
Meteor.startup(() => {
Projects.remove({})
Projects.insert( {
"techInfo": {
"equipInfo": [{
"item": {
"$ref": "equipment",
"$id": new Mongo.ObjectID("581a20cb4abab607fd17f07d")
},
"quantity": "22800",
"type": "module"
},
{
"item": {
"$ref": "equipment",
"$id": new Mongo.ObjectID("581a20cb4abab607fd17f07e")
},
"quantity": "1666",
"type": "inverter"
}
]
}
} )
let techInfo = Projects.findOne();
Projects.update({ _id: techInfo._id },
{ $set: { "techInfo.equipInfo.1.quantity": 1000000 } }
);
console.log(Projects.findOne().techInfo);
});
这应该可以,$set
之前的{
需要关闭
Projects.update(
{_id: projectId},
{$set: {"techInfo.equipInfo.1.quantity": 1000000}}
);
如果您只想更新数组的第一个对象而不取决于条件,这就是您的解决方案
Projects.update({_id: projectId},{$set : {"techInfo.equipInfo.0.quantity" : 1000000}})
如果你想遍历元素找到数组并更新它,你可以使用这个
Projects.update({_id: projectId,"techInfo.equipInfo" : {"$elemMatch" : {"type" : "module"}}},{$set : {"techInfo.equipInfo.$.quantity" : 1000000}})