对于一个文档结构为:
{
"_id" : ObjectId("57133995fb5f8930d0e9b81a"),
"taskList" : [{
"taskId" : NumberLong(1),
"state" : "ST00",
"createTime" : ISODate("2016-04-17T07:21:58.424Z")
},{
"taskId" : NumberLong(2),
"state" : "ST00",
"createTime" : ISODate("2016-04-17T07:21:58.424Z")
},{
"taskId" : NumberLong(3),
"state" : "ST00",
"createTime" : ISODate("2016-04-17T07:21:58.424Z")
}]
}
taskList 长度不确定
如何批量对数组内容进行修改呢?
例如批量修改 "_id" : ObjectId("57133995fb5f8930d0e9b81a") 的 taskList 内嵌元素 的 state 字段 为 'ST02'
@Mongoing中文社区
L'instruction update de MongoDB ne peut mettre à jour que le premier élément correspondant du tableau à la fois. Quelques idées :
1) Remodelez, placez la liste de tâches dans un autre tableau, puis utilisez la référence pour la référencer. Si tu as beaucoup de besoins
2) Effectuez d’abord une requête pour obtenir la longueur de taskList, puis épelez l’instruction de mise à jour en fonction de cette longueur :
var length = db.test.aggregate([{$project:{lenOfArray: {$size:"$taskList"}}}]).next().lenOfArray;
var updateObj = {};
for(var i=0;i<length;i++){
updateObj["taskList."+ i+".stat"] = "ST02";
}
db.test.update( { }, {$set: updateObj } );
Comment mettre un éléphant au réfrigérateur ? Ouvrez la porte, mettez-la dedans, fermez la porte
.Idem. Récupérez ces données, parcourez ce tableau et modifiez-les vous-même ~
De manière générale, c'est comme ça
Mongodb ne prend actuellement pas en charge la modification par lots des données intégrées. Actuellement, il ne se met à jour qu'une par une, mais vous pouvez écrire une méthode JS pour l'encapsuler
.Comme ci-dessus, utilisez la méthode js pour modifier chaque document et enregistrez-le. L'exemple de code est le suivant. Le sujet doit le tester par lui-même (exécuter dans le shell mongo)